13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% W W IIIII DDDD GGGG EEEEE TTTTT % 83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% W W I D D G E T % 93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% W W W I D D G GG EEE T % 103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% WW WW I D D G G E T % 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% W W IIIII DDDD GGGG EEEEE T % 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickCore X11 User Interface Methods % 153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Software Design % 17de984cdc3631106b1cbbb8d3972b76a0fc27e8e8cristy% Cristy % 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% September 1993 % 193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 217ce65e7125a4e1df1a274ce373c537a9df9c16cdCristy% Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization % 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% dedicated to making software imaging solutions freely available. % 233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% You may not use this file except in compliance with the License. You may % 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% obtain a copy of the License at % 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% http://www.imagemagick.org/script/license.php % 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Unless required by applicable law or agreed to in writing, software % 303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% distributed under the License is distributed on an "AS IS" BASIS, % 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% See the License for the specific language governing permissions and % 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% limitations under the License. % 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Include declarations. 423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 434c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/studio.h" 444c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/color.h" 454c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/color-private.h" 464c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception.h" 474c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception-private.h" 484c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/image.h" 494c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/magick.h" 504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/memory_.h" 514c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h" 524c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/token.h" 537832dc2d904c471770087cce18a9a2d76c2216a3cristy#include "MagickCore/token-private.h" 544c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/utility.h" 55d1dd6e4fefa0810b9893e6ac9418f79c97c1b39acristy#include "MagickCore/utility-private.h" 564c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/xwindow-private.h" 574c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/widget.h" 58bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristy#include "MagickCore/widget-private.h" 593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_X11_DELEGATE) 613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Define declarations. 643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define AreaIsActive(matte_info,position) ( \ 663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((position.y >= (int) (matte_info.y-matte_info.bevel_width)) && \ 673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (position.y < (int) (matte_info.y+matte_info.height+matte_info.bevel_width))) \ 683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ? MagickTrue : MagickFalse) 693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define Extent(s) ((int) strlen(s)) 703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define MatteIsActive(matte_info,position) ( \ 713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((position.x >= (int) (matte_info.x-matte_info.bevel_width)) && \ 723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (position.y >= (int) (matte_info.y-matte_info.bevel_width)) && \ 733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (position.x < (int) (matte_info.x+matte_info.width+matte_info.bevel_width)) && \ 743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (position.y < (int) (matte_info.y+matte_info.height+matte_info.bevel_width))) \ 753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ? MagickTrue : MagickFalse) 763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define MaxTextWidth ((unsigned int) (255*XTextWidth(font_info,"_",1))) 773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define MinTextWidth (26*XTextWidth(font_info,"_",1)) 783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define QuantumMargin MagickMax(font_info->max_bounds.width,12) 793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define WidgetTextWidth(font_info,text) \ 803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((unsigned int) XTextWidth(font_info,text,Extent(text))) 813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define WindowIsActive(window_info,position) ( \ 823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((position.x >= 0) && (position.y >= 0) && \ 833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (position.x < (int) window_info.width) && \ 843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (position.y < (int) window_info.height)) ? MagickTrue : MagickFalse) 853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Enum declarations. 883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 893ed852eea50f9d4cd633efb8c2b054b8e33c253cristytypedef enum 903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ControlState = 0x0001, 923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy InactiveWidgetState = 0x0004, 933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy JumpListState = 0x0008, 943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RedrawActionState = 0x0010, 953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RedrawListState = 0x0020, 963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RedrawWidgetState = 0x0040, 973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy UpdateListState = 0x0100 983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} WidgetState; 993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Typedef declarations. 1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1033ed852eea50f9d4cd633efb8c2b054b8e33c253cristytypedef struct _XWidgetInfo 1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 1063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *cursor, 1073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *text, 1083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *marker; 1093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 1113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id; 1123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 1143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bevel_width, 1153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width, 1163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height; 1173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 1193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x, 1203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y, 1213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy min_y, 1223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy max_y; 1233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickStatusType 1253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy raised, 1263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy active, 1273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy center, 1283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy trough, 1293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy highlight; 1303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} XWidgetInfo; 1313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Variable declarations. 1343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1353ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic XWidgetInfo 1363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy monitor_info = 1373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) NULL, (char *) NULL, (char *) NULL, 0, 0, 0, 0, 0, 0, 0, 0, 1393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickFalse, MagickFalse, MagickFalse, MagickFalse, MagickFalse 1403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }, 1413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy submenu_info = 1423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) NULL, (char *) NULL, (char *) NULL, 0, 0, 0, 0, 0, 0, 0, 0, 1443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickFalse, MagickFalse, MagickFalse, MagickFalse, MagickFalse 1453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }, 1463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *selection_info = (XWidgetInfo *) NULL, 1473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy toggle_info = 1483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) NULL, (char *) NULL, (char *) NULL, 0, 0, 0, 0, 0, 0, 0, 0, 1503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickFalse, MagickFalse, MagickFalse, MagickFalse, MagickFalse 1513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 1523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Constant declarations. 1553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1563ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic const int 1573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy BorderOffset = 4, 1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DoubleClick = 250; 1593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Method prototypes. 1623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1633ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void 1643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatte(Display *,const XWindowInfo *,const XWidgetInfo *), 1653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetBevelColor(Display *,const XWindowInfo *,const MagickStatusType), 1663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetMatteColor(Display *,const XWindowInfo *,const MagickStatusType), 1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetTextColor(Display *,const XWindowInfo *,const MagickStatusType); 1683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% D e s t r o y X W i d g e t % 1753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% DestroyXWidget() destroys resources associated with the X widget. 1813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the DestroyXWidget method is: 1833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void DestroyXWidget() 1853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 1873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 189bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void DestroyXWidget(void) 1903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (selection_info != (XWidgetInfo *) NULL) 1923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info=(XWidgetInfo *) RelinquishMagickMemory(selection_info); 1933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X D r a w B e v e l % 2013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawBevel() "sets off" an area with a highlighted upper and left bevel and 2073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% a shadowed lower and right bevel. The highlighted and shadowed bevels 2083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% create a 3-D effect. 2093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XDrawBevel function is: 2113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawBevel(display,window_info,bevel_info) 2133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 2153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 2173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 2183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window_info: Specifies a pointer to a X11 XWindowInfo structure. 2203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o bevel_info: Specifies a pointer to a XWidgetInfo structure. It 2223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% contains the extents of the bevel. 2233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2253ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XDrawBevel(Display *display,const XWindowInfo *window_info, 2263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const XWidgetInfo *bevel_info) 2273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 2293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x1, 2303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x2, 2313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y1, 2323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y2; 2333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 2353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bevel_width; 2363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XPoint 2383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[6]; 2393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 2413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw upper and left beveled border. 2423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x1=bevel_info->x; 2443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y1=bevel_info->y+bevel_info->height; 2453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x2=bevel_info->x+bevel_info->width; 2463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y2=bevel_info->y; 2473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bevel_width=bevel_info->bevel_width; 2483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].x=x1; 2493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].y=y1; 2503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].x=x1; 2513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].y=y2; 2523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].x=x2; 2533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].y=y2; 2543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].x=x2+bevel_width; 2553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].y=y2-bevel_width; 2563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[4].x=x1-bevel_width; 2573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[4].y=y2-bevel_width; 2583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[5].x=x1-bevel_width; 2593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[5].y=y1+bevel_width; 2603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetBevelColor(display,window_info,bevel_info->raised); 2613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillPolygon(display,window_info->id,window_info->widget_context, 2623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points,6,Complex,CoordModeOrigin); 2633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 2643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw lower and right beveled border. 2653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].x=x1; 2673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].y=y1; 2683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].x=x2; 2693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].y=y1; 2703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].x=x2; 2713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].y=y2; 2723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].x=x2+bevel_width; 2733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].y=y2-bevel_width; 2743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[4].x=x2+bevel_width; 2753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[4].y=y1+bevel_width; 2763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[5].x=x1-bevel_width; 2773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[5].y=y1+bevel_width; 2783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetBevelColor(display,window_info,!bevel_info->raised); 2793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillPolygon(display,window_info->id,window_info->widget_context, 2803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points,6,Complex,CoordModeOrigin); 2813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetFillStyle(display,window_info->widget_context,FillSolid); 2823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 2833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 2853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X D r a w B e v e l e d B u t t o n % 2903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawBeveledButton() draws a button with a highlighted upper and left bevel 2963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% and a shadowed lower and right bevel. The highlighted and shadowed bevels 2973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% create a 3-D effect. 2983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XDrawBeveledButton function is: 3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawBeveledButton(display,window_info,button_info) 3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 3063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window_info: Specifies a pointer to a X11 XWindowInfo structure. 3093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o button_info: Specifies a pointer to a XWidgetInfo structure. It 3113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% contains the extents of the button. 3123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 3143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3153ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XDrawBeveledButton(Display *display,const XWindowInfo *window_info, 3163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const XWidgetInfo *button_info) 3173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 3193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x, 3203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 3213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 3233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 3243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 3263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info; 3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XRectangle 3293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info; 3303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 3323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw matte. 3333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBevel(display,window_info,button_info); 3353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetMatteColor(display,window_info,button_info->raised); 3363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillRectangle(display,window_info->id,window_info->widget_context, 3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy button_info->x,button_info->y,button_info->width,button_info->height); 3383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=button_info->x-button_info->bevel_width-1; 3393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=button_info->y-button_info->bevel_width-1; 3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetForeground(display,window_info->widget_context, 3413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->pixel_info->trough_color.pixel); 3423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (button_info->raised || (window_info->depth == 1)) 3433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawRectangle(display,window_info->id,window_info->widget_context, 3443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x,y,button_info->width+(button_info->bevel_width << 1)+1, 3453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy button_info->height+(button_info->bevel_width << 1)+1); 3463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (button_info->text == (char *) NULL) 3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 3483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 3493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set cropping region. 3503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 3513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.width=(unsigned short) button_info->width; 3523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.height=(unsigned short) button_info->height; 3533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.x=button_info->x; 3543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.y=button_info->y; 3553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 3563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw text. 3573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 3583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=window_info->font_info; 3593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,button_info->text); 3603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=button_info->x+(QuantumMargin >> 1); 3613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (button_info->center) 3623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=button_info->x+(button_info->width >> 1)-(width >> 1); 3633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=button_info->y+((button_info->height- 3643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (font_info->ascent+font_info->descent)) >> 1)+font_info->ascent; 3653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((int) button_info->width == (QuantumMargin >> 1)) 3663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 3683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Option button-- write label to right of button. 3693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 3703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetTextColor(display,window_info,MagickTrue); 3713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=button_info->x+button_info->width+button_info->bevel_width+ 3723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (QuantumMargin >> 1); 3733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawString(display,window_info->id,window_info->widget_context, 3743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x,y,button_info->text,Extent(button_info->text)); 3753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 3763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetClipRectangles(display,window_info->widget_context,0,0,&crop_info, 3783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1,Unsorted); 3793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetTextColor(display,window_info,button_info->raised); 3803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawString(display,window_info->id,window_info->widget_context,x,y, 3813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy button_info->text,Extent(button_info->text)); 3823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetClipMask(display,window_info->widget_context,None); 3833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (button_info->raised == MagickFalse) 3843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDelay(display,SuspendTime << 2); 3853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X D r a w B e v e l e d M a t t e % 3933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawBeveledMatte() draws a matte with a shadowed upper and left bevel and 3993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% a highlighted lower and right bevel. The highlighted and shadowed bevels 4003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% create a 3-D effect. 4013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XDrawBeveledMatte function is: 4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawBeveledMatte(display,window_info,matte_info) 4053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 4073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 4093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 4103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window_info: Specifies a pointer to a X11 XWindowInfo structure. 4123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o matte_info: Specifies a pointer to a XWidgetInfo structure. It 4143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% contains the extents of the matte. 4153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 4173ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XDrawBeveledMatte(Display *display,const XWindowInfo *window_info, 4183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const XWidgetInfo *matte_info) 4193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 4213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw matte. 4223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 4233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBevel(display,window_info,matte_info); 4243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatte(display,window_info,matte_info); 4253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 4283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X D r a w M a t t e % 4333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawMatte() fills a rectangular area with the matte color. 4393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XDrawMatte function is: 4413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawMatte(display,window_info,matte_info) 4433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 4453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 4473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 4483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window_info: Specifies a pointer to a X11 XWindowInfo structure. 4503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o matte_info: Specifies a pointer to a XWidgetInfo structure. It 4523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% contains the extents of the matte. 4533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 4553ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XDrawMatte(Display *display,const XWindowInfo *window_info, 4563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const XWidgetInfo *matte_info) 4573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 4583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 4593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw matte. 4603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 4613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((matte_info->trough == MagickFalse) || (window_info->depth == 1)) 4623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillRectangle(display,window_info->id, 4633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->highlight_context,matte_info->x,matte_info->y, 4643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy matte_info->width,matte_info->height); 4653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 4663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetForeground(display,window_info->widget_context, 4683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->pixel_info->trough_color.pixel); 4693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillRectangle(display,window_info->id,window_info->widget_context, 4703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy matte_info->x,matte_info->y,matte_info->width,matte_info->height); 4713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 4733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 4753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X D r a w M a t t e T e x t % 4803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 4833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawMatteText() draws a matte with text. If the text exceeds the extents 4863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% of the text, a portion of the text relative to the cursor is displayed. 4873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XDrawMatteText function is: 4893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawMatteText(display,window_info,text_info) 4913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 4933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 4953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 4963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window_info: Specifies a pointer to a X11 XWindowInfo structure. 4983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 4993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o text_info: Specifies a pointer to a XWidgetInfo structure. It 5003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% contains the extents of the text. 5013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 5023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 5033ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XDrawMatteText(Display *display,const XWindowInfo *window_info, 5043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWidgetInfo *text_info) 5053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 5063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char 5073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *text; 5083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 5103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy n, 5113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x, 5123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 5133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 5153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 5163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 5183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 5193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 5203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 5223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info; 5233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XRectangle 5253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info; 5263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Clear the text area. 5293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetMatteColor(display,window_info,MagickFalse); 5313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillRectangle(display,window_info->id,window_info->widget_context, 5323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->x,text_info->y,text_info->width,text_info->height); 5333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text_info->text == (char *) NULL) 5343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 5353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetTextColor(display,window_info,text_info->highlight); 5363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=window_info->font_info; 5373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=text_info->x+(QuantumMargin >> 2); 5383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=text_info->y+font_info->ascent+(text_info->height >> 2); 5393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=text_info->width-(QuantumMargin >> 1); 5403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) (font_info->ascent+font_info->descent); 5413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*text_info->text == '\0') 5423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy No text-- just draw cursor. 5453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawLine(display,window_info->id,window_info->annotate_context, 5473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x,y+3,x,y-height+3); 5483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 5493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set cropping region. 5523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.width=(unsigned short) text_info->width; 5543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.height=(unsigned short) text_info->height; 5553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.x=text_info->x; 5563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.y=text_info->y; 5573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine beginning of the visible text. 5593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text_info->cursor < text_info->marker) 5613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->marker=text_info->cursor; 5623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 5633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text=text_info->marker; 5653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XTextWidth(font_info,(char *) text,(int) (text_info->cursor-text)) > 5663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) width) 5673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text=text_info->text; 5693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < Extent(text); i++) 5703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy n=XTextWidth(font_info,(char *) text+i,(int) 5723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (text_info->cursor-text-i)); 5733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (n <= (int) width) 5743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 5753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->marker=(char *) text+i; 5773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 5803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw text and cursor. 5813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text_info->highlight == MagickFalse) 5833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetClipRectangles(display,window_info->widget_context,0,0, 5853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &crop_info,1,Unsorted); 5863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawString(display,window_info->id,window_info->widget_context, 5873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x,y,text_info->marker,Extent(text_info->marker)); 5883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetClipMask(display,window_info->widget_context,None); 5893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 5913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 5923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetClipRectangles(display,window_info->annotate_context,0,0, 5933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &crop_info,1,Unsorted); 5943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,text_info->marker); 5953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillRectangle(display,window_info->id, 5963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->annotate_context,x,y-font_info->ascent,width,height); 5973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetClipMask(display,window_info->annotate_context,None); 5983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetClipRectangles(display,window_info->highlight_context,0,0, 5993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &crop_info,1,Unsorted); 6003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawString(display,window_info->id, 6013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->highlight_context,x,y,text_info->marker, 6023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Extent(text_info->marker)); 6033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetClipMask(display,window_info->highlight_context,None); 6043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 6053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x+=XTextWidth(font_info,text_info->marker,(int) 6063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (text_info->cursor-text_info->marker)); 6073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawLine(display,window_info->id,window_info->annotate_context,x,y+3, 6083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x,y-height+3); 6093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 6103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 6123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X D r a w T r i a n g l e E a s t % 6173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 6203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawTriangleEast() draws a triangle with a highlighted left bevel and a 6233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% shadowed right and lower bevel. The highlighted and shadowed bevels create 6243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% a 3-D effect. 6253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XDrawTriangleEast function is: 6273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawTriangleEast(display,window_info,triangle_info) 6293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 6313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 6333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 6343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window_info: Specifies a pointer to a X11 XWindowInfo structure. 6363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o triangle_info: Specifies a pointer to a XWidgetInfo structure. It 6383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% contains the extents of the triangle. 6393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 6403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 6413ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XDrawTriangleEast(Display *display,const XWindowInfo *window_info, 6423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const XWidgetInfo *triangle_info) 6433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 6443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 6453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x1, 6463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x2, 6473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x3, 6483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y1, 6493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y2, 6503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y3; 6513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 6533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bevel_width; 6543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 6563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info; 6573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XPoint 6593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[4]; 6603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 6623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw triangle matte. 6633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 6643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x1=triangle_info->x; 6653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y1=triangle_info->y; 6663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x2=triangle_info->x+triangle_info->width; 6673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y2=triangle_info->y+(triangle_info->height >> 1); 6683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x3=triangle_info->x; 6693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y3=triangle_info->y+triangle_info->height; 6703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bevel_width=triangle_info->bevel_width; 6713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].x=x1; 6723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].y=y1; 6733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].x=x2; 6743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].y=y2; 6753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].x=x3; 6763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].y=y3; 6773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetMatteColor(display,window_info,triangle_info->raised); 6783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillPolygon(display,window_info->id,window_info->widget_context, 6793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points,3,Complex,CoordModeOrigin); 6803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 6813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw bottom bevel. 6823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 6833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].x=x2; 6843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].y=y2; 6853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].x=x3; 6863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].y=y3; 6873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].x=x3-bevel_width; 6883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].y=y3+bevel_width; 6893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].x=x2+bevel_width; 6903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].y=y2; 6913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetBevelColor(display,window_info,!triangle_info->raised); 6923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillPolygon(display,window_info->id,window_info->widget_context, 6933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points,4,Complex,CoordModeOrigin); 6943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 6953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw Left bevel. 6963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 6973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].x=x3; 6983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].y=y3; 6993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].x=x1; 7003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].y=y1; 7013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].x=x1-bevel_width+1; 7023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].y=y1-bevel_width; 7033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].x=x3-bevel_width+1; 7043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].y=y3+bevel_width; 7053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetBevelColor(display,window_info,triangle_info->raised); 7063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillPolygon(display,window_info->id,window_info->widget_context, 7073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points,4,Complex,CoordModeOrigin); 7083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 7093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw top bevel. 7103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 7113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].x=x1; 7123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].y=y1; 7133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].x=x2; 7143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].y=y2; 7153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].x=x2+bevel_width; 7163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].y=y2; 7173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].x=x1-bevel_width; 7183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].y=y1-bevel_width; 7193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillPolygon(display,window_info->id,window_info->widget_context, 7203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points,4,Complex,CoordModeOrigin); 7213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetFillStyle(display,window_info->widget_context,FillSolid); 7223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (triangle_info->text == (char *) NULL) 7233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 7243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 7253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Write label to right of triangle. 7263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 7273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=window_info->font_info; 7283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetTextColor(display,window_info,MagickTrue); 7293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x1=triangle_info->x+triangle_info->width+triangle_info->bevel_width+ 7303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (QuantumMargin >> 1); 7313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y1=triangle_info->y+((triangle_info->height- 7323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (font_info->ascent+font_info->descent)) >> 1)+font_info->ascent; 7333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawString(display,window_info->id,window_info->widget_context,x1,y1, 7343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy triangle_info->text,Extent(triangle_info->text)); 7353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 7363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 7383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X D r a w T r i a n g l e N o r t h % 7433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 7463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawTriangleNorth() draws a triangle with a highlighted left bevel and a 7493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% shadowed right and lower bevel. The highlighted and shadowed bevels create 7503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% a 3-D effect. 7513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XDrawTriangleNorth function is: 7533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawTriangleNorth(display,window_info,triangle_info) 7553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 7573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 7593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 7603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window_info: Specifies a pointer to a X11 XWindowInfo structure. 7623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o triangle_info: Specifies a pointer to a XWidgetInfo structure. It 7643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% contains the extents of the triangle. 7653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 7663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 7673ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XDrawTriangleNorth(Display *display,const XWindowInfo *window_info, 7683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const XWidgetInfo *triangle_info) 7693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 7703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 7713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x1, 7723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x2, 7733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x3, 7743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y1, 7753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y2, 7763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y3; 7773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 7793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bevel_width; 7803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XPoint 7823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[4]; 7833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 7853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw triangle matte. 7863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 7873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x1=triangle_info->x; 7883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y1=triangle_info->y+triangle_info->height; 7893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x2=triangle_info->x+(triangle_info->width >> 1); 7903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y2=triangle_info->y; 7913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x3=triangle_info->x+triangle_info->width; 7923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y3=triangle_info->y+triangle_info->height; 7933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bevel_width=triangle_info->bevel_width; 7943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].x=x1; 7953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].y=y1; 7963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].x=x2; 7973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].y=y2; 7983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].x=x3; 7993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].y=y3; 8003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetMatteColor(display,window_info,triangle_info->raised); 8013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillPolygon(display,window_info->id,window_info->widget_context, 8023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points,3,Complex,CoordModeOrigin); 8033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 8043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw left bevel. 8053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 8063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].x=x1; 8073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].y=y1; 8083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].x=x2; 8093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].y=y2; 8103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].x=x2; 8113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].y=y2-bevel_width-2; 8123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].x=x1-bevel_width-1; 8133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].y=y1+bevel_width; 8143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetBevelColor(display,window_info,triangle_info->raised); 8153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillPolygon(display,window_info->id,window_info->widget_context, 8163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points,4,Complex,CoordModeOrigin); 8173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 8183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw right bevel. 8193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 8203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].x=x2; 8213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].y=y2; 8223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].x=x3; 8233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].y=y3; 8243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].x=x3+bevel_width; 8253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].y=y3+bevel_width; 8263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].x=x2; 8273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].y=y2-bevel_width; 8283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetBevelColor(display,window_info,!triangle_info->raised); 8293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillPolygon(display,window_info->id,window_info->widget_context, 8303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points,4,Complex,CoordModeOrigin); 8313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 8323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw lower bevel. 8333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 8343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].x=x3; 8353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].y=y3; 8363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].x=x1; 8373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].y=y1; 8383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].x=x1-bevel_width; 8393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].y=y1+bevel_width; 8403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].x=x3+bevel_width; 8413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].y=y3+bevel_width; 8423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillPolygon(display,window_info->id,window_info->widget_context, 8433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points,4,Complex,CoordModeOrigin); 8443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetFillStyle(display,window_info->widget_context,FillSolid); 8453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 8463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 8483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X D r a w T r i a n g l e S o u t h % 8533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 8563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 8573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawTriangleSouth() draws a border with a highlighted left and right bevel 8593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% and a shadowed lower bevel. The highlighted and shadowed bevels create a 8603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3-D effect. 8613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XDrawTriangleSouth function is: 8633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawTriangleSouth(display,window_info,triangle_info) 8653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 8673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 8693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 8703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window_info: Specifies a pointer to a X11 XWindowInfo structure. 8723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o triangle_info: Specifies a pointer to a XWidgetInfo structure. It 8743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% contains the extents of the triangle. 8753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 8763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8773ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XDrawTriangleSouth(Display *display,const XWindowInfo *window_info, 8783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const XWidgetInfo *triangle_info) 8793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 8803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 8813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x1, 8823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x2, 8833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x3, 8843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y1, 8853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y2, 8863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y3; 8873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 8893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bevel_width; 8903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XPoint 8923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[4]; 8933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 8953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw triangle matte. 8963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 8973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x1=triangle_info->x; 8983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y1=triangle_info->y; 8993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x2=triangle_info->x+(triangle_info->width >> 1); 9003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y2=triangle_info->y+triangle_info->height; 9013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x3=triangle_info->x+triangle_info->width; 9023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y3=triangle_info->y; 9033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bevel_width=triangle_info->bevel_width; 9043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].x=x1; 9053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].y=y1; 9063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].x=x2; 9073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].y=y2; 9083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].x=x3; 9093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].y=y3; 9103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetMatteColor(display,window_info,triangle_info->raised); 9113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillPolygon(display,window_info->id,window_info->widget_context, 9123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points,3,Complex,CoordModeOrigin); 9133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 9143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw top bevel. 9153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 9163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].x=x3; 9173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].y=y3; 9183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].x=x1; 9193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].y=y1; 9203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].x=x1-bevel_width; 9213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].y=y1-bevel_width; 9223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].x=x3+bevel_width; 9233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].y=y3-bevel_width; 9243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetBevelColor(display,window_info,triangle_info->raised); 9253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillPolygon(display,window_info->id,window_info->widget_context, 9263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points,4,Complex,CoordModeOrigin); 9273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 9283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw right bevel. 9293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 9303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].x=x2; 9313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].y=y2; 9323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].x=x3+1; 9333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].y=y3-bevel_width; 9343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].x=x3+bevel_width; 9353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].y=y3-bevel_width; 9363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].x=x2; 9373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].y=y2+bevel_width; 9383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetBevelColor(display,window_info,!triangle_info->raised); 9393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillPolygon(display,window_info->id,window_info->widget_context, 9403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points,4,Complex,CoordModeOrigin); 9413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 9423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw left bevel. 9433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 9443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].x=x1; 9453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[0].y=y1; 9463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].x=x2; 9473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[1].y=y2; 9483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].x=x2; 9493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[2].y=y2+bevel_width; 9503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].x=x1-bevel_width; 9513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points[3].y=y1-bevel_width; 9523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetBevelColor(display,window_info,triangle_info->raised); 9533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillPolygon(display,window_info->id,window_info->widget_context, 9543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy points,4,Complex,CoordModeOrigin); 9553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetFillStyle(display,window_info->widget_context,FillSolid); 9563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 9573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 9593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X D r a w W i d g e t T e x t % 9643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 9673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 9683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawWidgetText() first clears the widget and draws a text string justifed 9703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% left (or center) in the x-direction and centered within the y-direction. 9713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XDrawWidgetText function is: 9733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDrawWidgetText(display,window_info,text_info) 9753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 9773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 9793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 9803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window_info: Specifies a pointer to a XWindowText structure. 9823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o text_info: Specifies a pointer to XWidgetInfo structure. 9843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 9853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 9863ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XDrawWidgetText(Display *display,const XWindowInfo *window_info, 9873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWidgetInfo *text_info) 9883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 9893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GC 9903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_context; 9913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 9933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x, 9943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 9953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 9963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 9973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 9983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 9993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 10013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info; 10023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XRectangle 10043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info; 10053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 10073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Clear the text area. 10083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 10093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_context=window_info->annotate_context; 10103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text_info->raised) 10113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XClearArea(display,window_info->id,text_info->x,text_info->y, 10123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->width,text_info->height,MagickFalse); 10133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 10143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFillRectangle(display,window_info->id,widget_context,text_info->x, 10163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->y,text_info->width,text_info->height); 10173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_context=window_info->highlight_context; 10183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 10193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text_info->text == (char *) NULL) 10203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 10213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*text_info->text == '\0') 10223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 10233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 10243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set cropping region. 10253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 10263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=window_info->font_info; 10273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.width=(unsigned short) text_info->width; 10283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.height=(unsigned short) text_info->height; 10293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.x=text_info->x; 10303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy crop_info.y=text_info->y; 10313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 10323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw text. 10333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 10343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,text_info->text); 10353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=text_info->x+(QuantumMargin >> 1); 10363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text_info->center) 10373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=text_info->x+(text_info->width >> 1)-(width >> 1); 10383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text_info->raised) 10393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (width > (text_info->width-QuantumMargin)) 10403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x+=(text_info->width-QuantumMargin-width); 10413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) (font_info->ascent+font_info->descent); 10423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=text_info->y+((text_info->height-height) >> 1)+font_info->ascent; 10433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetClipRectangles(display,widget_context,0,0,&crop_info,1,Unsorted); 10443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawString(display,window_info->id,widget_context,x,y,text_info->text, 10453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Extent(text_info->text)); 10463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetClipMask(display,widget_context,None); 10473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (x < text_info->x) 10483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawLine(display,window_info->id,window_info->annotate_context, 10493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->x,text_info->y,text_info->x,text_info->y+text_info->height-1); 10503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 10513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 10523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 10533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X E d i t T e x t % 10583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 10613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 10623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XEditText() edits a text string as indicated by the key symbol. 10643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XEditText function is: 10663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XEditText(display,text_info,key_symbol,text,state) 10683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 10703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 10723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 10733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o text_info: Specifies a pointer to a XWidgetInfo structure. It 10753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% contains the extents of the text. 10763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o key_symbol: A X11 KeySym that indicates what editing function to 10783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% perform to the text. 10793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o text: A character string to insert into the text. 10813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1082bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% o state: An size_t that indicates whether the key symbol is a 10833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% control character or not. 10843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 10853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 10863ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XEditText(Display *display,XWidgetInfo *text_info, 1087bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy const KeySym key_symbol,char *text,const size_t state) 10883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 10893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch ((int) key_symbol) 10903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_BackSpace: 10923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Delete: 10933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text_info->highlight) 10953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 10963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 10973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Erase the entire line of text. 10983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 10993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *text_info->text='\0'; 11003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->cursor=text_info->text; 11013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->marker=text_info->text; 11023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->highlight=MagickFalse; 11033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 11053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Erase one character. 11063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 11073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text_info->cursor != text_info->text) 11083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->cursor--; 11103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(text_info->cursor,text_info->cursor+1, 1111151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 11123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->highlight=MagickFalse; 11133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Left: 11173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Left: 11183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 11203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move cursor one position left. 11213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 11223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text_info->cursor == text_info->text) 11233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->cursor--; 11253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Right: 11283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Right: 11293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 11313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move cursor one position right. 11323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 11333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text_info->cursor == (text_info->text+Extent(text_info->text))) 11343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->cursor++; 11363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 11393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 11413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p, 11423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 11433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 11453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 11463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & ControlState) 11483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*text == '\0') 11503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 1151151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if ((Extent(text_info->text)+1) >= (int) MagickPathExtent) 11523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XBell(display,0); 11533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 11543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text_info->highlight) 11563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 11583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Erase the entire line of text. 11593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 11603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *text_info->text='\0'; 11613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->cursor=text_info->text; 11623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->marker=text_info->text; 11633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->highlight=MagickFalse; 11643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 11663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Insert a string into the text. 11673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 11683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=text_info->text+Extent(text_info->text)+strlen(text); 11693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i <= Extent(text_info->cursor); i++) 11703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 11713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q=(*(q-Extent(text))); 11723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q--; 11733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=text; 11753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < Extent(text); i++) 11763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *text_info->cursor++=(*p++); 11773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 11793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 11813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 11823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 11833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 11843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X G e t W i d g e t I n f o % 11893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 11923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 11933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XGetWidgetInfo() initializes the XWidgetInfo structure. 11953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XGetWidgetInfo function is: 11973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 11983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XGetWidgetInfo(text,widget_info) 11993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 12013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o text: A string of characters associated with the widget. 12033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o widget_info: Specifies a pointer to a X11 XWidgetInfo structure. 12053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 12073ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XGetWidgetInfo(const char *text,XWidgetInfo *widget_info) 12083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 12093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 12103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize widget info. 12113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 12123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->id=(~0); 12133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->bevel_width=3; 12143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->width=1; 12153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->height=1; 12163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->x=0; 12173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->y=0; 12183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->min_y=0; 12193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->max_y=0; 12203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->raised=MagickTrue; 12213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->active=MagickFalse; 12223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->center=MagickTrue; 12233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->trough=MagickFalse; 12243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->highlight=MagickFalse; 12253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->text=(char *) text; 12263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->cursor=(char *) text; 12273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text != (char *) NULL) 12283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->cursor+=Extent(text); 12293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy widget_info->marker=(char *) text; 12303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 12333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X H i g h l i g h t W i d g e t % 12383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XHighlightWidget() draws a highlighted border around a window. 12443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XHighlightWidget function is: 12463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XHighlightWidget(display,window_info,x,y) 12483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 12503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 12523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 12533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window_info: Specifies a pointer to a X11 XWindowInfo structure. 12553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o x: Specifies an integer representing the rectangle offset in the 12573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% x-direction. 12583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o y: Specifies an integer representing the rectangle offset in the 12603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% y-direction. 12613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 12633ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XHighlightWidget(Display *display,const XWindowInfo *window_info, 12643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const int x,const int y) 12653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 12663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 12673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw the widget highlighting rectangle. 12683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 12693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetBevelColor(display,window_info,MagickTrue); 12703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawRectangle(display,window_info->id,window_info->widget_context,x,y, 12713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->width-(x << 1),window_info->height-(y << 1)); 12723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawRectangle(display,window_info->id,window_info->widget_context, 12733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x-1,y-1,window_info->width-(x << 1)+1,window_info->height-(y << 1)+1); 12743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetBevelColor(display,window_info,MagickFalse); 12753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawRectangle(display,window_info->id,window_info->widget_context, 12763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x-1,y-1,window_info->width-(x << 1),window_info->height-(y << 1)); 12773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetFillStyle(display,window_info->widget_context,FillSolid); 12783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 12793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 12803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 12813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X S c r e e n E v e n t % 12863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 12893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 12903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XScreenEvent() returns MagickTrue if the any event on the X server queue is 12923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% associated with the widget window. 12933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XScreenEvent function is: 12953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% int XScreenEvent(Display *display,XEvent *event,char *data) 12973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 12983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 12993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 13013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 13023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o event: Specifies a pointer to a X11 XEvent structure. 13043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o data: Specifies a pointer to a XWindows structure. 13063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 13073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 13083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 13103ed852eea50f9d4cd633efb8c2b054b8e33c253cristyextern "C" { 13113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 13123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13133ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic int XScreenEvent(Display *display,XEvent *event,char *data) 13143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 13153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindows 13163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *windows; 13173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows=(XWindows *) data; 13193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->xany.window == windows->popup.id) 13203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->type == MapNotify) 13223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->popup.mapped=MagickTrue; 13233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->type == UnmapNotify) 13243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->popup.mapped=MagickFalse; 13253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 13263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->xany.window == windows->widget.id) 13283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->type == MapNotify) 13303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.mapped=MagickTrue; 13313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->type == UnmapNotify) 13323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.mapped=MagickFalse; 13333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 13343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (event->type) 13363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonPress: 13383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((event->xbutton.button == Button3) && 13403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (event->xbutton.state & Mod1Mask)) 13413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 13433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert Alt-Button3 to Button2. 13443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 13453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event->xbutton.button=Button2; 13463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event->xbutton.state&=(~Mod1Mask); 13473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 13493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case Expose: 13513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->xexpose.window == windows->image.id) 13533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XRefreshWindow(display,&windows->image,event); 13553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 13563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->xexpose.window == windows->magnify.id) 13583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->xexpose.count == 0) 13593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->magnify.mapped) 13603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13616710d8414f0ed06e4eaf9346366be72e2b4719efcristy ExceptionInfo 13626710d8414f0ed06e4eaf9346366be72e2b4719efcristy *exception; 13636710d8414f0ed06e4eaf9346366be72e2b4719efcristy 13646710d8414f0ed06e4eaf9346366be72e2b4719efcristy exception=AcquireExceptionInfo(); 13656710d8414f0ed06e4eaf9346366be72e2b4719efcristy XMakeMagnifyImage(display,windows,exception); 13666710d8414f0ed06e4eaf9346366be72e2b4719efcristy exception=DestroyExceptionInfo(exception); 13673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 13683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->xexpose.window == windows->command.id) 13703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->xexpose.count == 0) 13713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCommandWidget(display,windows,(const char **) NULL,event); 13733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 13743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 13763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case FocusOut: 13783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 13793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 13803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set input focus for backdrop window. 13813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 13823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->xfocus.window == windows->image.id) 13833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetInputFocus(display,windows->image.id,RevertToNone, 13843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CurrentTime); 13853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 13863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonRelease: 13883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyPress: 13893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyRelease: 13903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MotionNotify: 13913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionNotify: 13923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 13933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 13943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 13953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 13963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 13973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 13983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 13993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 14003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 14013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 14023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 14033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 14043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X S e t B e v e l C o l o r % 14093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XSetBevelColor() sets the graphic context for drawing a beveled border. 14153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XSetBevelColor function is: 14173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XSetBevelColor(display,window_info,raised) 14193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 14213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 14233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 14243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window_info: Specifies a pointer to a X11 XWindowInfo structure. 14263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o raised: A value other than zero indicates the color show be a 14283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% "highlight" color, otherwise the "shadow" color is set. 14293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 14313ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XSetBevelColor(Display *display,const XWindowInfo *window_info, 14323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const MagickStatusType raised) 14333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 14343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->depth == 1) 14353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 14363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Pixmap 14373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy stipple; 14383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 14393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 14403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Monochrome window. 14413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 14423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetBackground(display,window_info->widget_context, 14433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBlackPixel(display,window_info->screen)); 14443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetForeground(display,window_info->widget_context, 14453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWhitePixel(display,window_info->screen)); 14463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetFillStyle(display,window_info->widget_context, 14473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy FillOpaqueStippled); 14483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy stipple=window_info->highlight_stipple; 14493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (raised == MagickFalse) 14503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy stipple=window_info->shadow_stipple; 14513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetStipple(display,window_info->widget_context,stipple); 14523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 14533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 14543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (raised) 14553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetForeground(display,window_info->widget_context, 14563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->pixel_info->highlight_color.pixel); 14573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 14583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetForeground(display,window_info->widget_context, 14593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->pixel_info->shadow_color.pixel); 14603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 14613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 14623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 14633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X S e t M a t t e C o l o r % 14683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 14713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 14723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XSetMatteColor() sets the graphic context for drawing the matte. 14743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XSetMatteColor function is: 14763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XSetMatteColor(display,window_info,raised) 14783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 14803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 14823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 14833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window_info: Specifies a pointer to a X11 XWindowInfo structure. 14853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o raised: A value other than zero indicates the matte is active. 14873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 14883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 14893ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XSetMatteColor(Display *display,const XWindowInfo *window_info, 14903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const MagickStatusType raised) 14913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 14923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->depth == 1) 14933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 14943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 14953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Monochrome window. 14963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 14973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (raised) 14983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetForeground(display,window_info->widget_context, 14993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWhitePixel(display,window_info->screen)); 15003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 15013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetForeground(display,window_info->widget_context, 15023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBlackPixel(display,window_info->screen)); 15033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 15043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 15053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (raised) 15063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetForeground(display,window_info->widget_context, 1507a4f7ef3cc82591986ef2810b1f85a05d343ef686dirk window_info->pixel_info->alpha_color.pixel); 15083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 15093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetForeground(display,window_info->widget_context, 15103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->pixel_info->depth_color.pixel); 15113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 15123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 15143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+ X S e t T e x t C o l o r % 15193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XSetTextColor() sets the graphic context for drawing text on a matte. 15253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XSetTextColor function is: 15273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XSetTextColor(display,window_info,raised) 15293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 15313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a pointer to the Display structure; returned from 15333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 15343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window_info: Specifies a pointer to a X11 XWindowInfo structure. 15363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o raised: A value other than zero indicates the color show be a 15383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% "highlight" color, otherwise the "shadow" color is set. 15393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 15413ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void XSetTextColor(Display *display,const XWindowInfo *window_info, 15423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const MagickStatusType raised) 15433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1544bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy ssize_t 15453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy foreground, 15463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy matte; 15473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->depth == 1) 15493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 15503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 15513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Monochrome window. 15523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 15533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (raised) 15543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetForeground(display,window_info->widget_context, 15553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBlackPixel(display,window_info->screen)); 15563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 15573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetForeground(display,window_info->widget_context, 15583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWhitePixel(display,window_info->screen)); 15593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 15603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 156149e2d862ad0faa61d99d9d252f75913ad3976750cristy foreground=(ssize_t) XPixelIntensity( 156249e2d862ad0faa61d99d9d252f75913ad3976750cristy &window_info->pixel_info->foreground_color); 1563a4f7ef3cc82591986ef2810b1f85a05d343ef686dirk matte=(ssize_t) XPixelIntensity(&window_info->pixel_info->alpha_color); 156449e2d862ad0faa61d99d9d252f75913ad3976750cristy if (MagickAbsoluteValue((int) (foreground-matte)) > (65535L >> 3)) 15653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetForeground(display,window_info->widget_context, 15663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->pixel_info->foreground_color.pixel); 15673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 15683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetForeground(display,window_info->widget_context, 15693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->pixel_info->background_color.pixel); 15703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 15713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 15723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 15733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X C o l o r B r o w s e r W i d g e t % 15783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 15813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 15823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XColorBrowserWidget() displays a Color Browser widget with a color query 15843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% to the user. The user keys a reply and presses the Action or Cancel button 15853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% to exit. The typed text is returned as the reply function parameter. 15863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XColorBrowserWidget method is: 15883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XColorBrowserWidget(Display *display,XWindows *windows, 15903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *action,char *reply) 15913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 15933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 15953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 15963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindows structure. 15983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 15993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o action: Specifies a pointer to the action of this widget. 16003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reply: the response from the user is returned in this parameter. 16023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 16033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1604bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XColorBrowserWidget(Display *display,XWindows *windows, 16053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *action,char *reply) 16063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 16073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define CancelButtonText "Cancel" 16083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define ColornameText "Name:" 16093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define ColorPatternText "Pattern:" 16103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define GrabButtonText "Grab" 16113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define ResetButtonText "Reset" 16123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 16143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **colorlist, 1615151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy primary_selection[MagickPathExtent], 1616151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy reset_pattern[MagickPathExtent], 1617151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy text[MagickPathExtent]; 16183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExceptionInfo 16203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *exception; 16213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 16233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x, 16243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 16253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 16273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 16283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 1630151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy glob_pattern[MagickPathExtent] = "*"; 16313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static MagickStatusType 16333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask = (MagickStatusType) (CWWidth | CWHeight | CWX | CWY); 16343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 16363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 16373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 16393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 16403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width, 16413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visible_colors, 16423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 16433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1644bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 16453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors, 16463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay, 16473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state; 16483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XColor 16503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy color; 16513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEvent 16533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event; 16543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 16563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info; 16573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XTextProperty 16593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_name; 16603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWidgetInfo 16623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info, 16633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info, 16643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info, 16653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy grab_info, 16663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info, 16673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mode_info, 16683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info, 16693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info, 16703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reset_info, 16713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info, 16723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info, 16733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info, 16743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info, 16753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info; 16763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowChanges 16783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes; 16793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 16803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 16813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Get color list and sort in ascending order. 16823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 16833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 16843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 16853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(action != (char *) NULL); 16863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(reply != (char *) NULL); 16873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",action); 16883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickTrue); 16893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 1690151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(reset_pattern,"*",MagickPathExtent); 16913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=AcquireExceptionInfo(); 16923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colorlist=GetColorList(glob_pattern,&colors,exception); 16933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colorlist == (char **) NULL) 16943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 16953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 16963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Pattern failed, obtain all the colors. 16973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 1698151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(glob_pattern,"*",MagickPathExtent); 16993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colorlist=GetColorList(glob_pattern,&colors,exception); 17003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colorlist == (char **) NULL) 17013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 17023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XNoticeWidget(display,windows,"Unable to obtain colors names:", 17033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy glob_pattern); 17043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDialogWidget(display,windows,action,"Enter color name:", 17053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply); 17063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 17073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 17083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 17093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 17103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine Color Browser widget attributes. 17113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 17123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=windows->widget.font_info; 17133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width=0; 171449e2d862ad0faa61d99d9d252f75913ad3976750cristy for (i=0; i < (int) colors; i++) 17153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,colorlist[i]) > text_width) 17163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width=WidgetTextWidth(font_info,colorlist[i]); 17173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,(char *) action); 17183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,CancelButtonText) > width) 17193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,CancelButtonText); 17203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,ResetButtonText) > width) 17213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,ResetButtonText); 17223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,GrabButtonText) > width) 17233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,GrabButtonText); 17243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width+=QuantumMargin; 17253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,ColorPatternText) > width) 17263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,ColorPatternText); 17273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,ColornameText) > width) 17283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,ColornameText); 17293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) (font_info->ascent+font_info->descent); 17303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 17313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Position Color Browser widget. 17323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 17333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=(unsigned int) 17343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (width+MagickMin((int) text_width,(int) MaxTextWidth)+6*QuantumMargin); 17353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_width=(unsigned int) 17363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (width+MinTextWidth+4*QuantumMargin); 17373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.width < windows->widget.min_width) 17383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=windows->widget.min_width; 17393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) 17403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((81*height) >> 2)+((13*QuantumMargin) >> 1)+4; 17413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_height=(unsigned int) 17423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (((23*height) >> 1)+((13*QuantumMargin) >> 1)+4); 17433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.height < windows->widget.min_height) 17443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=windows->widget.min_height; 17453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XConstrainWindowPosition(display,&windows->widget); 17463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 17473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Map Color Browser widget. 17483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 17493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(windows->widget.name,"Browse and Select a Color", 1750151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 17513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XStringListToTextProperty(&windows->widget.name,1,&window_name); 17523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 17533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 17543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMName(display,windows->widget.id,&window_name); 17553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMIconName(display,windows->widget.id,&window_name); 17563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) window_name.value); 17573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 17583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.width=(int) windows->widget.width; 17593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.height=(int) windows->widget.height; 17603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.x=windows->widget.x; 17613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.y=windows->widget.y; 17623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XReconfigureWMWindow(display,windows->widget.id,windows->widget.screen, 17633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask,&window_changes); 17643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XMapRaised(display,windows->widget.id); 17653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.mapped=MagickFalse; 17663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 17673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to X events. 17683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 176954ebd8d7629c2faa0c8fb0dc97967f31c759d2d2cristy XGetWidgetInfo((char *) NULL,&mode_info); 17703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&slider_info); 17713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&north_info); 17723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&south_info); 17733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&expose_info); 17749057376a5dad425c62fb6a46438f1f0bb879d009cristy XGetWidgetInfo((char *) NULL,&selection_info); 17753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visible_colors=0; 17763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime << 2; 17773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state=UpdateConfigurationState; 17783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 17793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 17803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & UpdateConfigurationState) 17813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 17823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 17833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id; 17843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 17853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 17863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize button information. 17873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 17883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(CancelButtonText,&cancel_info); 17893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.width=width; 17903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.height=(unsigned int) ((3*height) >> 1); 17913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.x=(int) 17923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (windows->widget.width-cancel_info.width-QuantumMargin-2); 17933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.y=(int) 17943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (windows->widget.height-cancel_info.height-QuantumMargin); 17953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(action,&action_info); 17963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.width=width; 17973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.height=(unsigned int) ((3*height) >> 1); 17983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.x=cancel_info.x-(cancel_info.width+(QuantumMargin >> 1)+ 17993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (action_info.bevel_width << 1)); 18003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.y=cancel_info.y; 18013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(GrabButtonText,&grab_info); 18023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy grab_info.width=width; 18033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy grab_info.height=(unsigned int) ((3*height) >> 1); 18043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy grab_info.x=QuantumMargin; 18053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy grab_info.y=((5*QuantumMargin) >> 1)+height; 18063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(ResetButtonText,&reset_info); 18073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reset_info.width=width; 18083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reset_info.height=(unsigned int) ((3*height) >> 1); 18093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reset_info.x=QuantumMargin; 18103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reset_info.y=grab_info.y+grab_info.height+QuantumMargin; 18113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 18123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize reply information. 18133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 18143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(reply,&reply_info); 18153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.raised=MagickFalse; 18163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.bevel_width--; 18173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.width=windows->widget.width-width-((6*QuantumMargin) >> 1); 18183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.height=height << 1; 18193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.x=(int) (width+(QuantumMargin << 1)); 18203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.y=action_info.y-reply_info.height-QuantumMargin; 18213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 18223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize mode information. 18233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 18243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&mode_info); 18253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mode_info.active=MagickTrue; 18263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mode_info.bevel_width=0; 18273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mode_info.width=(unsigned int) (action_info.x-(QuantumMargin << 1)); 18283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mode_info.height=action_info.height; 18293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mode_info.x=QuantumMargin; 18303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mode_info.y=action_info.y; 18313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 18323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize scroll information. 18333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 18343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&scroll_info); 18353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.bevel_width--; 18363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.width=height; 18373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.height=(unsigned int) (reply_info.y-grab_info.y- 18383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (QuantumMargin >> 1)); 18393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.x=reply_info.x+(reply_info.width-scroll_info.width); 18403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.y=grab_info.y-reply_info.bevel_width; 18413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.raised=MagickFalse; 18423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.trough=MagickTrue; 18433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info=scroll_info; 18443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.raised=MagickTrue; 18453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.width-=(north_info.bevel_width << 1); 18463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.height=north_info.width-1; 18473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.x+=north_info.bevel_width; 18483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.y+=north_info.bevel_width; 18493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info=north_info; 18503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.y=scroll_info.y+scroll_info.height-scroll_info.bevel_width- 18513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.height; 18523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=slider_info.id; 18533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info=north_info; 18543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=id; 18553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.width-=2; 18563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.min_y=north_info.y+north_info.height+north_info.bevel_width+ 18573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width+2; 18583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.height=scroll_info.height-((slider_info.min_y- 18593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.y+1) << 1)+4; 18603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visible_colors=scroll_info.height/(height+(height >> 3)); 18613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colors > visible_colors) 18623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.height=(unsigned int) 18633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((visible_colors*slider_info.height)/colors); 18643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.max_y=south_info.y-south_info.bevel_width- 18653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width-2; 18663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.x=scroll_info.x+slider_info.bevel_width+1; 18673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 18683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info=scroll_info; 18693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y; 18703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 18713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize list information. 18723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 18733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&list_info); 18743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.raised=MagickFalse; 18753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.bevel_width--; 18763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.width=(unsigned int) 18773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (scroll_info.x-reply_info.x-(QuantumMargin >> 1)); 18783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.height=scroll_info.height; 18793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.x=reply_info.x; 18803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.y=scroll_info.y; 18813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.mapped == MagickFalse) 18823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=JumpListState; 18833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 18843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize text information. 18853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 18863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *text='\0'; 18873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(text,&text_info); 18883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.center=MagickFalse; 18893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.width=reply_info.width; 18903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.height=height; 18913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.x=list_info.x-(QuantumMargin >> 1); 18923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.y=QuantumMargin; 18933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 18943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize selection information. 18953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 18963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&selection_info); 18973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.center=MagickFalse; 18983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.width=list_info.width; 18993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.height=(unsigned int) ((9*height) >> 3); 19003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.x=list_info.x; 19013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~UpdateConfigurationState); 19023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 19033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawWidgetState) 19043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 19053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 19063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw Color Browser window. 19073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 19083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=QuantumMargin; 19093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=text_info.y+((text_info.height-height) >> 1)+font_info->ascent; 19103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawString(display,windows->widget.id, 19113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.annotate_context,x,y,ColorPatternText, 19123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Extent(ColorPatternText)); 1913151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(text_info.text,glob_pattern,MagickPathExtent); 19143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&text_info); 19153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&grab_info); 19163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&reset_info); 19173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,&windows->widget,&list_info); 19183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,&windows->widget,&scroll_info); 19193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,&windows->widget,&north_info); 19203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&slider_info); 19213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,&windows->widget,&south_info); 19223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=QuantumMargin; 19233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=reply_info.y+((reply_info.height-height) >> 1)+font_info->ascent; 19243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawString(display,windows->widget.id, 19253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.annotate_context,x,y,ColornameText, 19263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Extent(ColornameText)); 19273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,&windows->widget,&reply_info); 19283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 19293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 19303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 19313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XHighlightWidget(display,&windows->widget,BorderOffset,BorderOffset); 19323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 19333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawActionState; 19343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 19353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawWidgetState); 19363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 19373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & UpdateListState) 19383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 19393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 19403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **checklist; 19413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1942bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 19433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_colors; 19443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 19453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XParseColor(display,windows->widget.map_info->colormap, 19463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy glob_pattern,&color); 19473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((status != False) || (strchr(glob_pattern,'-') != (char *) NULL)) 19483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 19493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 19503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Reply is a single color name-- exit. 19513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 1952151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(reply,glob_pattern,MagickPathExtent); 1953151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(glob_pattern,reset_pattern,MagickPathExtent); 19543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickFalse; 19553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 19563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 19573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 19583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 19593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update color list. 19603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 19613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy checklist=GetColorList(glob_pattern,&number_colors,exception); 19623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (number_colors == 0) 19633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1964151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(glob_pattern,reset_pattern,MagickPathExtent); 19653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XBell(display,0); 19663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 19673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 19683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 196949e2d862ad0faa61d99d9d252f75913ad3976750cristy for (i=0; i < (int) colors; i++) 19703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colorlist[i]=DestroyString(colorlist[i]); 19713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colorlist != (char **) NULL) 19723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colorlist=(char **) RelinquishMagickMemory(colorlist); 19733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colorlist=checklist; 19743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colors=number_colors; 19753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 19763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 19773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Sort color list in ascending order. 19783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 19793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.height= 19803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.height-((slider_info.min_y-scroll_info.y+1) << 1)+1; 19813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colors > visible_colors) 19823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.height=(unsigned int) 19833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((visible_colors*slider_info.height)/colors); 19843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.max_y=south_info.y-south_info.bevel_width- 19853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width-2; 19863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 19873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 19883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y; 19893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 19903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=(~0); 19913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 19923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 19933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw color name & reply. 19943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 19953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 19963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.text; 1997151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(text_info.text,glob_pattern,MagickPathExtent); 19983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&text_info); 19993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 20003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,&windows->widget,&scroll_info); 20013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,&windows->widget,&north_info); 20023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&slider_info); 20033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,&windows->widget,&south_info); 20043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XHighlightWidget(display,&windows->widget,BorderOffset,BorderOffset); 20053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~UpdateListState); 20063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & JumpListState) 20083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 20103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Jump scroll to match user color. 20113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 20123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=(~0); 201349e2d862ad0faa61d99d9d252f75913ad3976750cristy for (i=0; i < (int) colors; i++) 20143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(colorlist[i],reply) >= 0) 20153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=LocaleCompare(colorlist[i],reply) == 0 ? i : ~0; 20173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 20183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((i < slider_info.id) || 20203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (i >= (int) (slider_info.id+visible_colors))) 20213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=i-(visible_colors >> 1); 20223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 20233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 20243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~JumpListState); 20253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawListState) 20273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 20293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine slider id and position. 20303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 20313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id >= (int) (colors-visible_colors)) 20323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=(int) (colors-visible_colors); 20333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((slider_info.id < 0) || (colors <= visible_colors)) 20343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 20353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 20363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colors != 0) 20378891f9ce489d3e61399b60436ea6c62f5ed9b887cristy slider_info.y+=(int) (slider_info.id*(slider_info.max_y- 20388891f9ce489d3e61399b60436ea6c62f5ed9b887cristy slider_info.min_y+1)/colors); 20393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id != selection_info.id) 20403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 20423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw scroll bar and file names. 20433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 20443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=slider_info.id; 20453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y=list_info.y+(height >> 3)+2; 20463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) visible_colors; i++) 20473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.raised=(slider_info.id+i) != list_info.id ? 20493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 20503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=(char *) NULL; 205149e2d862ad0faa61d99d9d252f75913ad3976750cristy if ((slider_info.id+i) < (int) colors) 20523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=colorlist[slider_info.id+i]; 20533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&selection_info); 20543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y+=(int) selection_info.height; 20553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 20573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update slider. 20583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 20593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y > expose_info.y) 20603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.height=(unsigned int) slider_info.y-expose_info.y; 20623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y-expose_info.height- 20633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width-1; 20643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 20663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.height=(unsigned int) expose_info.y-slider_info.y; 20683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y+slider_info.height+ 20693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width+1; 20703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,&windows->widget,&north_info); 20723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatte(display,&windows->widget,&expose_info); 20733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&slider_info); 20743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,&windows->widget,&south_info); 20753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y; 20763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawListState); 20783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 20793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawActionState) 20803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 20813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 2082151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy colorname[MagickPathExtent]; 20833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 20843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 20853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Display the selected color in a drawing area. 20863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 2087a4f7ef3cc82591986ef2810b1f85a05d343ef686dirk color=windows->widget.pixel_info->alpha_color; 20883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XParseColor(display,windows->widget.map_info->colormap, 2089a4f7ef3cc82591986ef2810b1f85a05d343ef686dirk reply_info.text,&windows->widget.pixel_info->alpha_color); 20903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XBestPixel(display,windows->widget.map_info->colormap,(XColor *) NULL, 20913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) windows->widget.visual_info->colormap_size, 2092a4f7ef3cc82591986ef2810b1f85a05d343ef686dirk &windows->widget.pixel_info->alpha_color); 20933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mode_info.text=colorname; 2094151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(mode_info.text,MagickPathExtent,"#%02x%02x%02x", 2095a4f7ef3cc82591986ef2810b1f85a05d343ef686dirk windows->widget.pixel_info->alpha_color.red, 2096a4f7ef3cc82591986ef2810b1f85a05d343ef686dirk windows->widget.pixel_info->alpha_color.green, 2097a4f7ef3cc82591986ef2810b1f85a05d343ef686dirk windows->widget.pixel_info->alpha_color.blue); 20983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&mode_info); 2099a4f7ef3cc82591986ef2810b1f85a05d343ef686dirk windows->widget.pixel_info->alpha_color=color; 21003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawActionState); 21013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 21033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Wait for next event. 21043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 21053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (north_info.raised && south_info.raised) 21063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XIfEvent(display,&event,XScreenEvent,(char *) windows); 21073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 21083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 21103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Brief delay before advancing scroll bar. 21113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 21123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDelay(display,delay); 21133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime; 21143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckIfEvent(display,&event,XScreenEvent,(char *) windows); 21153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (north_info.raised == MagickFalse) 21163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id > 0) 21173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 21193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider up. 21203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 21213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id--; 21223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 21233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (south_info.raised == MagickFalse) 212549e2d862ad0faa61d99d9d252f75913ad3976750cristy if (slider_info.id < (int) colors) 21263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 21283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider down. 21293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 21303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id++; 21313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 21323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.type != ButtonRelease) 21343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 21353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (event.type) 21373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonPress: 21393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(slider_info,event.xbutton)) 21413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 21433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Track slider. 21443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 21453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.active=MagickTrue; 21463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 21473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(north_info,event.xbutton)) 21493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id > 0) 21503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 21523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider up. 21533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 21543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.raised=MagickFalse; 21553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id--; 21563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 21573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 21583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(south_info,event.xbutton)) 216049e2d862ad0faa61d99d9d252f75913ad3976750cristy if (slider_info.id < (int) colors) 21613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 21633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider down. 21643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 21653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.raised=MagickFalse; 21663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id++; 21673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 21683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 21693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(scroll_info,event.xbutton)) 21713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 21733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider. 21743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 21753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.y < slider_info.y) 21763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id-=(visible_colors-1); 21773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 21783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id+=(visible_colors-1); 21793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 21803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 21813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 21823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(list_info,event.xbutton)) 21833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 21843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 21853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id; 21863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 21873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 21883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed list matte. 21893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 21903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=slider_info.id+(event.xbutton.y-(list_info.y+(height >> 1))+1)/ 21913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.height; 21923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (id >= (int) colors) 21933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 21943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(reply_info.text,colorlist[id], 2195151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 21963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 21973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.marker=reply_info.text; 21983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.text+Extent(reply_info.text); 21993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 22003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawActionState; 22013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (id == list_info.id) 22023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(glob_pattern,reply_info.text, 2204151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 22053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateListState; 22063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 22083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=id; 22093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 22103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 22113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(grab_info,event.xbutton)) 22133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 22153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Grab button. 22163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 22173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy grab_info.raised=MagickFalse; 22183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&grab_info); 22193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 22203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(reset_info,event.xbutton)) 22223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 22243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Reset button. 22253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 22263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reset_info.raised=MagickFalse; 22273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&reset_info); 22283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 22293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(mode_info,event.xbutton)) 22313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 22333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed mode button. 22343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 22359a7df36bb436fe340138d7eea39c974b45c9344ccristy if (mode_info.text != (char *) NULL) 22369a7df36bb436fe340138d7eea39c974b45c9344ccristy (void) CopyMagickString(reply_info.text,mode_info.text, 2237151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 22383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(primary_selection,reply_info.text, 2239151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 22403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetSelectionOwner(display,XA_PRIMARY,windows->widget.id, 22413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event.xbutton.time); 22423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=XGetSelectionOwner(display,XA_PRIMARY) == 22433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.id ? MagickTrue : MagickFalse; 22443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.marker=reply_info.text; 22453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.text+Extent(reply_info.text); 22463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 22473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 22483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(action_info,event.xbutton)) 22503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 22523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed action button. 22533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 22543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickFalse; 22553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 22563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 22573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(cancel_info,event.xbutton)) 22593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 22613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Cancel button. 22623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 22633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=MagickFalse; 22643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 22653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 22663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(reply_info,event.xbutton) == MagickFalse) 22683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 22693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.button != Button2) 22703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static Time 22723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy click_time; 22733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 22743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 22753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move text cursor to position of button press. 22763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 22773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=event.xbutton.x-reply_info.x-(QuantumMargin >> 2); 22783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=1; i <= Extent(reply_info.marker); i++) 22793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XTextWidth(font_info,reply_info.marker,i) > x) 22803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 22813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.marker+i-1; 22823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.time > (click_time+DoubleClick)) 22833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 22843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 22853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 22863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 22873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Become the XA_PRIMARY selection owner. 22883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 22893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(primary_selection,reply_info.text, 2290151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 22913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetSelectionOwner(display,XA_PRIMARY,windows->widget.id, 22923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event.xbutton.time); 22933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=XGetSelectionOwner(display,XA_PRIMARY) == 22943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.id ? MagickTrue : MagickFalse; 22953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 22963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 22973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy click_time=event.xbutton.time; 22983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 22993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 23013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Request primary selection. 23023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 23033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XConvertSelection(display,XA_PRIMARY,XA_STRING,XA_STRING, 23043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.id,event.xbutton.time); 23053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 23063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonRelease: 23083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.mapped == MagickFalse) 23103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 23113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (north_info.raised == MagickFalse) 23123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 23143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User released up button. 23153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 23163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime << 2; 23173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.raised=MagickTrue; 23183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,&windows->widget,&north_info); 23193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (south_info.raised == MagickFalse) 23213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 23233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User released down button. 23243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 23253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime << 2; 23263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.raised=MagickTrue; 23273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,&windows->widget,&south_info); 23283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.active) 23303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 23323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Stop tracking slider. 23333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 23343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.active=MagickFalse; 23353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 23363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (grab_info.raised == MagickFalse) 23383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 23403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(grab_info,event.xbutton)) 23413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 2343fd706f930f397221c6ba26f112e96e262fb0ba2eanthony Select a fill color from the X server. 23443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 23456710d8414f0ed06e4eaf9346366be72e2b4719efcristy (void) XGetWindowColor(display,windows,reply_info.text, 23466710d8414f0ed06e4eaf9346366be72e2b4719efcristy exception); 23473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.marker=reply_info.text; 23483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.text+Extent(reply_info.text); 23493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 23503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawActionState; 23513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy grab_info.raised=MagickTrue; 23533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&grab_info); 23543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reset_info.raised == MagickFalse) 23563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 23583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(reset_info,event.xbutton)) 23593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(glob_pattern,reset_pattern, 2361151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 23623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateListState; 23633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reset_info.raised=MagickTrue; 23653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&reset_info); 23663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (action_info.raised == MagickFalse) 23683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 23703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(action_info,event.xbutton)) 23723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*reply_info.text == '\0') 23743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XBell(display,0); 23753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 23763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 23773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickTrue; 23803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 23813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (cancel_info.raised == MagickFalse) 23833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 23853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(cancel_info,event.xbutton)) 23863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 23883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 23893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=MagickTrue; 23913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 23923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(reply_info,event.xbutton) == MagickFalse) 23943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 23953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 23963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 23973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ClientMessage: 23983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 23993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 24003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy If client window delete message, exit. 24013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 24023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.message_type != windows->wm_protocols) 24033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l == (int) windows->wm_take_focus) 24053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetInputFocus(display,event.xclient.window,RevertToParent, 24073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (Time) event.xclient.data.l[1]); 24083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l != (int) windows->wm_delete_window) 24113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.window == windows->widget.id) 24133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 24153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 24163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ConfigureNotify: 24213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 24233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update widget configuration. 24243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 24253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xconfigure.window != windows->widget.id) 24263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((event.xconfigure.width == (int) windows->widget.width) && 24283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (event.xconfigure.height == (int) windows->widget.height)) 24293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=(unsigned int) 24313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.width,(int) windows->widget.min_width); 24323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) 24333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.height,(int) windows->widget.min_height); 24343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateConfigurationState; 24353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case EnterNotify: 24383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 24403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~InactiveWidgetState); 24423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case Expose: 24453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.window != windows->widget.id) 24473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.count != 0) 24493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawWidgetState; 24513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyPress: 24543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 2456151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy command[MagickPathExtent]; 24573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 24583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static int 24593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 24603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 24613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static KeySym 24623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy key_symbol; 24633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 24643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 24653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to a user key press. 24663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 24673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xkey.window != windows->widget.id) 24683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=XLookupString((XKeyEvent *) &event.xkey,command, 24703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) sizeof(command),&key_symbol,(XComposeStatus *) NULL); 24713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *(command+length)='\0'; 24723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (AreaIsActive(scroll_info,event.xkey)) 24733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 24753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider. 24763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 24773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch ((int) key_symbol) 24783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Home: 24803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Home: 24813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 24833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Up: 24863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Up: 24873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id--; 24893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Down: 24923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Down: 24933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 24943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id++; 24953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 24963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 24973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Prior: 24983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Prior: 24993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id-=visible_colors; 25013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Next: 25043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Next: 25053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id+=visible_colors; 25073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_End: 25103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_End: 25113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=(int) colors; 25133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 25173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((key_symbol == XK_Return) || (key_symbol == XK_KP_Enter)) 25203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 25223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Read new color or glob patterm. 25233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 25243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*reply_info.text == '\0') 25253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 2526151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(glob_pattern,reply_info.text,MagickPathExtent); 25273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateListState; 25283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (key_symbol == XK_Control_L) 25313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ControlState; 25333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & ControlState) 25363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch ((int) key_symbol) 25373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_u: 25393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_U: 25403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 25423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Erase the entire line of text. 25433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 25443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 25453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.text; 25463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.marker=reply_info.text; 25473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 25483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 25513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEditText(display,&reply_info,key_symbol,command,state); 25543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 25553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=JumpListState; 25563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XParseColor(display,windows->widget.map_info->colormap, 25573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.text,&color); 25583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 25593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawActionState; 25603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyRelease: 25633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 2565151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy command[MagickPathExtent]; 25663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 25673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static KeySym 25683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy key_symbol; 25693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 25703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 25713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to a user key release. 25723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 25733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xkey.window != windows->widget.id) 25743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XLookupString((XKeyEvent *) &event.xkey,command, 25763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) sizeof(command),&key_symbol,(XComposeStatus *) NULL); 25773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (key_symbol == XK_Control_L) 25783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~ControlState); 25793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case LeaveNotify: 25823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 25843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=InactiveWidgetState; 25863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MapNotify: 25893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask&=(~CWX); 25913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask&=(~CWY); 25923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 25933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 25943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MotionNotify: 25953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 25963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 25973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Discard pending button motion events. 25983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 25993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckMaskEvent(display,ButtonMotionMask,&event)) ; 26003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.active) 26013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 26023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 26033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider matte. 26043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 26053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=event.xmotion.y- 26063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((slider_info.height+slider_info.bevel_width) >> 1)+1; 26073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y < slider_info.min_y) 26083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 26093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y > slider_info.max_y) 26103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.max_y; 26113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 26123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y != slider_info.min_y) 26133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=(int) ((colors*(slider_info.y- 26143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.min_y+1))/(slider_info.max_y-slider_info.min_y+1)); 26153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 26163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 26173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 26183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & InactiveWidgetState) 26193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 26203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (grab_info.raised == MatteIsActive(grab_info,event.xmotion)) 26213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 26223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 26233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Grab button status changed. 26243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 26253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy grab_info.raised=!grab_info.raised; 26263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&grab_info); 26273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 26283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 26293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reset_info.raised == MatteIsActive(reset_info,event.xmotion)) 26303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 26313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 26323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Reset button status changed. 26333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 26343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reset_info.raised=!reset_info.raised; 26353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&reset_info); 26363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 26373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 26383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (action_info.raised == MatteIsActive(action_info,event.xmotion)) 26393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 26403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 26413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Action button status changed. 26423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 26433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=action_info.raised == MagickFalse ? 26443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 26453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 26463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 26473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 26483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (cancel_info.raised == MatteIsActive(cancel_info,event.xmotion)) 26493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 26503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 26513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Cancel button status changed. 26523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 26533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=cancel_info.raised == MagickFalse ? 26543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 26553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 26563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 26573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 26583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 26593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 26603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionClear: 26613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 26623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 26633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 26643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 26653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 26663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionNotify: 26673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 26683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Atom 26693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy type; 26703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 26713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 26723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy format; 26733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 26743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 26753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *data; 26763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2677f2faecf9facdbbb14fcba373365f9f691a9658e0cristy unsigned long 26783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy after, 26793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 26803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 26813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 26823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Obtain response from primary selection. 26833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 26843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xselection.property == (Atom) None) 26853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 26863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetWindowProperty(display,event.xselection.requestor, 26873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event.xselection.property,0L,2047L,MagickTrue,XA_STRING,&type, 26883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &format,&length,&after,&data); 26893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((status != Success) || (type != XA_STRING) || (format == 32) || 26903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (length == 0)) 26913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 2692151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if ((Extent(reply_info.text)+length) >= (MagickPathExtent-1)) 26933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XBell(display,0); 26943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 26953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 26963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 26973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Insert primary selection in reply text. 26983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 26993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *(data+length)='\0'; 27003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEditText(display,&reply_info,(KeySym) XK_Insert,(char *) data, 27013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state); 27023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 27033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=JumpListState; 27043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawActionState; 27053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 27063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) data); 27073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 27083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 27093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionRequest: 27103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 27113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSelectionEvent 27123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify; 27133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 27143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSelectionRequestEvent 27153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *request; 27163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 27173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reply_info.highlight == MagickFalse) 27183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 27193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 27203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set primary selection. 27213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 27223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy request=(&(event.xselectionrequest)); 27233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XChangeProperty(request->display,request->requestor, 27243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy request->property,request->target,8,PropModeReplace, 27253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned char *) primary_selection,Extent(primary_selection)); 27263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.type=SelectionNotify; 27273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.send_event=MagickTrue; 27283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.display=request->display; 27293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.requestor=request->requestor; 27303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.selection=request->selection; 27313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.target=request->target; 27323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.time=request->time; 27333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (request->property == None) 27343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.property=request->target; 27353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 27363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.property=request->property; 27373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSendEvent(request->display,request->requestor,False, 27383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy NoEventMask,(XEvent *) ¬ify); 27393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 27403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 27413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 27423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 27433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } while ((state & ExitState) == 0); 27443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickFalse); 27453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XWithdrawWindow(display,windows->widget.id,windows->widget.screen); 27463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 27473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 27483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Free color list. 27493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 275049e2d862ad0faa61d99d9d252f75913ad3976750cristy for (i=0; i < (int) colors; i++) 27513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colorlist[i]=DestroyString(colorlist[i]); 27523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (colorlist != (char **) NULL) 27533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy colorlist=(char **) RelinquishMagickMemory(colorlist); 27543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=DestroyExceptionInfo(exception); 27553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((*reply == '\0') || (strchr(reply,'-') != (char *) NULL)) 27563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 27573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XParseColor(display,windows->widget.map_info->colormap,reply,&color); 27583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 27593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 27603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XNoticeWidget(display,windows,"Color is unknown to X server:",reply); 2761151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(reply,"gray",MagickPathExtent); 27623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 27633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 27643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 27653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 27663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 27673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 27683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 27693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X C o m m a n d W i d g e t % 27703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 27713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 27723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 27733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 27743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XCommandWidget() maps a menu and returns the command pointed to by the user 27763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% when the button is released. 27773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XCommandWidget method is: 27793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% int XCommandWidget(Display *display,XWindows *windows, 27813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char **selections,XEvent *event) 27823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 27843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o selection_number: Specifies the number of the selection that the 27863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% user choose. 27873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 27893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 27903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindows structure. 27923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o selections: Specifies a pointer to one or more strings that comprise 27943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the choices in the menu. 27953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o event: Specifies a pointer to a X11 XEvent structure. 27973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 27983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2799bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate int XCommandWidget(Display *display,XWindows *windows, 28003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char **selections,XEvent *event) 28013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 28023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define tile_width 112 28033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define tile_height 70 28043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 28053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static const unsigned char 28063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy tile_bits[]= 28073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 28083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 28123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 28133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 28143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x1e, 0x38, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x1e, 0xbc, 0x9f, 0x03, 0x00, 0x3e, 0x00, 0xc0, 28183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x1f, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x1e, 0xfc, 0xff, 0x0f, 0x80, 0x3f, 28193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0xf0, 0x1f, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0xfc, 0xff, 0x1f, 28203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xe0, 0x3f, 0x00, 0xfc, 0x1f, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0xfc, 28213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xff, 0x1f, 0xf0, 0x3f, 0x00, 0xfe, 0x1f, 0xf8, 0x0f, 0x00, 0x00, 0x00, 28223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x1e, 0xfc, 0xfc, 0x3f, 0xf8, 0x3f, 0x00, 0xff, 0x1e, 0xfc, 0x0f, 0x00, 28233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x1e, 0x7c, 0xfc, 0x3e, 0xf8, 0x3c, 0x80, 0x1f, 0x1e, 0x7c, 28243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x78, 0x78, 0x3c, 0x7c, 0x3c, 0xc0, 0x0f, 28253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x1e, 0x3e, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x78, 0x78, 0x3c, 0x7c, 0x3c, 28263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xc0, 0x07, 0x1e, 0x3e, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x78, 0x78, 0x3c, 28273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x7c, 0x7c, 0xc0, 0x0f, 0x1e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x78, 28283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x78, 0x3c, 0xfc, 0x7c, 0x80, 0x7f, 0x1e, 0x7c, 0x00, 0x00, 0x00, 0x00, 28293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x1e, 0xf8, 0x78, 0x7c, 0xf8, 0xff, 0x00, 0xff, 0x1f, 0xf8, 0xff, 0x00, 28303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x1e, 0xf8, 0x78, 0x7c, 0xf0, 0xff, 0x07, 0xfe, 0x1f, 0xf8, 28313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xff, 0x00, 0x00, 0x00, 0x1e, 0xf8, 0x78, 0x7c, 0xf0, 0xff, 0x07, 0xf8, 28323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x1f, 0xf0, 0xff, 0x01, 0x00, 0x00, 0x1e, 0xf8, 0x78, 0x7c, 0xc0, 0xef, 28333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x07, 0xe0, 0x1f, 0xc0, 0xff, 0x01, 0x00, 0x00, 0x1e, 0x70, 0x40, 0x78, 28343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0xc7, 0x07, 0x00, 0x1e, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 28353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 28363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 28373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 28383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 28393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 28433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 28443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 28453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 28463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x02, 0x00, 28483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 28493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xc0, 0x0f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x60, 0x00, 0xc0, 0x0f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x78, 0x00, 0xc0, 0x8f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 28533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0xc0, 0x8f, 0x3f, 0x00, 0x00, 0x00, 28543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0xe0, 0x9f, 0x7f, 0x00, 28553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0xe0, 0xdf, 28563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x78, 0x00, 28573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xe0, 0xdf, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x0c, 28583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x78, 0x30, 0xf0, 0xff, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 28593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x0f, 0xf8, 0x70, 0xf0, 0xff, 0x7b, 0x00, 0x00, 0x1f, 0x00, 0xe0, 28603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x0f, 0x1e, 0x80, 0x0f, 0xf8, 0x78, 0xf0, 0xfd, 0xf9, 0x00, 0xc0, 0x1f, 28613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0xf8, 0x0f, 0x00, 0xe0, 0x1f, 0xf8, 0x7c, 0xf0, 0xfc, 0xf9, 0x00, 28623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xf0, 0x1f, 0x00, 0xfe, 0x0f, 0x00, 0xf0, 0x07, 0xf8, 0x3e, 0xf8, 0xfc, 28633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xf0, 0x01, 0xf8, 0x1f, 0x00, 0xff, 0x0f, 0x1e, 0xf0, 0x03, 0xf8, 0x3f, 28643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xf8, 0xf8, 0xf0, 0x01, 0xfc, 0x1f, 0x80, 0x7f, 0x0f, 0x1e, 0xf8, 0x00, 28653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xf8, 0x1f, 0x78, 0x18, 0xf0, 0x01, 0x7c, 0x1e, 0xc0, 0x0f, 0x0f, 0x1e, 28663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x7c, 0x00, 0xf0, 0x0f, 0x78, 0x00, 0xf0, 0x01, 0x3e, 0x1e, 0xe0, 0x07, 28673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x0f, 0x1e, 0x7c, 0x00, 0xf0, 0x07, 0x7c, 0x00, 0xe0, 0x01, 0x3e, 0x1e, 28683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xe0, 0x03, 0x0f, 0x1e, 0x3e, 0x00, 0xf0, 0x0f, 0x7c, 0x00, 0xe0, 0x03, 28693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x3e, 0x3e, 0xe0, 0x07, 0x0f, 0x1e, 0x1e, 0x00, 0xf0, 0x1f, 0x3c, 0x00, 28703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xe0, 0x03, 0x7e, 0x3e, 0xc0, 0x3f, 0x0f, 0x1e, 0x3e, 0x00, 0xf0, 0x1f, 28713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x3e, 0x00, 0xe0, 0x03, 0xfc, 0x7f, 0x80, 0xff, 0x0f, 0x1e, 0xfc, 0x00, 28723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xf0, 0x3e, 0x3e, 0x00, 0xc0, 0x03, 0xf8, 0xff, 0x03, 0xff, 0x0f, 0x1e, 28733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0xfc, 0x07, 0xf0, 0x7c, 0x1e, 0x00, 0xc0, 0x03, 0xf8, 0xff, 0x03, 0xfc, 28743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x0f, 0x1e, 0xf8, 0x1f, 0xf0, 0xf8, 0x1e, 0x00, 0xc0, 0x03, 0xe0, 0xf7, 28753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x03, 0xf0, 0x0f, 0x1e, 0xe0, 0x3f, 0xf0, 0x78, 0x1c, 0x00, 0x80, 0x03, 28763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x80, 0xe3, 0x03, 0x00, 0x0f, 0x1e, 0xc0, 0x3f, 0xf0, 0x30, 0x00, 0x00, 28773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0e, 0x00, 0x3e, 0x00, 0x00, 28783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x10, 28793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 28803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 28813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 28853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 28863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 28873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 28883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 28903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 28913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 28923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 28933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id, 28943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 28953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 28963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 28973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 28983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 28993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static unsigned int 29003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_selections; 29013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 29023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 29033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height; 29043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2905bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 29063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state; 29073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 29083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 29093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info; 29103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 29113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 29123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 29133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 29143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=windows->command.font_info; 29153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) (font_info->ascent+font_info->descent); 29163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=(~0); 29173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state=DefaultState; 29183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event == (XEvent *) NULL) 29193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 29203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 29213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 29223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 29233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XTextProperty 29243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_name; 29253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 29263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowChanges 29273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes; 29283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 29293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 29303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine command window attributes. 29313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 29323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(selections != (const char **) NULL); 29333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.width=0; 29343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; selections[i] != (char *) NULL; i++) 29353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 29363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,(char *) selections[i]); 29373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (width > windows->command.width) 29383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.width=width; 29393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 29403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_selections=(unsigned int) i; 29413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.width+=3*QuantumMargin+10; 29423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((int) windows->command.width < (tile_width+QuantumMargin+10)) 29433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.width=(unsigned int) (tile_width+QuantumMargin+10); 29443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.height=(unsigned int) (number_selections* 29453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (((3*height) >> 1)+10)+tile_height+20); 29463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.min_width=windows->command.width; 29473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.min_height=windows->command.height; 29483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XConstrainWindowPosition(display,&windows->command); 29493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->command.id != (Window) NULL) 29503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 29513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 29523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 29533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 29543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 29553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Reconfigure command window. 29563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 29573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XStringListToTextProperty(&windows->command.name,1, 29583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &window_name); 29593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 29603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 29613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMName(display,windows->command.id,&window_name); 29623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMIconName(display,windows->command.id,&window_name); 29633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) window_name.value); 29643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 29653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.width=(int) windows->command.width; 29663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.height=(int) windows->command.height; 29673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XReconfigureWMWindow(display,windows->command.id, 29683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.screen,(unsigned int) (CWWidth | CWHeight), 29693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &window_changes); 29703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 29713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 29723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate selection info memory. 29733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 29743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (selection_info != (XWidgetInfo *) NULL) 29753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info=(XWidgetInfo *) RelinquishMagickMemory(selection_info); 29763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info=(XWidgetInfo *) AcquireQuantumMemory(number_selections, 29773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*selection_info)); 29783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (selection_info == (XWidgetInfo *) NULL) 29793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2980beb1a6beff37a76105c2f7a95845c2c75d8a2ff5cristy ThrowXWindowFatalException(ResourceLimitFatalError, 29813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "MemoryAllocationFailed","..."); 29823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(id); 29833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 29843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateConfigurationState | RedrawWidgetState; 29853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 29863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 29873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Wait for next event. 29883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 29893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event != (XEvent *) NULL) 29903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (event->type) 29913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 29923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonPress: 29933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 29943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) number_selections; i++) 29953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 29963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(selection_info[i],event->xbutton) == MagickFalse) 29973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 29983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (i >= (int) windows->command.data) 29993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 30003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info[i].raised=MagickFalse; 30013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->command,&selection_info[i]); 30023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 30033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 30043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy submenu_info=selection_info[i]; 30053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy submenu_info.active=MagickTrue; 300658a749ec1fc5d48a2ea305d892aa6004454bb5eacristy toggle_info.y=submenu_info.y+(submenu_info.height >> 1)- 300758a749ec1fc5d48a2ea305d892aa6004454bb5eacristy (toggle_info.height >> 1); 30083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=i; 30093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckWindowEvent(display,windows->widget.id,LeaveWindowMask, 30103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event); 30113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 30123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 30133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 30143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 30153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonRelease: 30163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 30173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) number_selections; i++) 30183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 30193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(selection_info[i],event->xbutton) == MagickFalse) 30203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 30213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=i; 30223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (id >= (int) windows->command.data) 30233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 30243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info[id].raised=MagickTrue; 30253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->command,&selection_info[id]); 30263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 30273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 30283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 30293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 30303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 30313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 30323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ClientMessage: 30333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 30343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 30353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy If client window delete message, withdraw command widget. 30363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 30373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->xclient.message_type != windows->wm_protocols) 30383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 30393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event->xclient.data.l != (int) windows->wm_delete_window) 30403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 30413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XWithdrawWindow(display,windows->command.id, 30423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.screen); 30433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 30443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 30453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ConfigureNotify: 30463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 30473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 30483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update widget configuration. 30493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 30503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->xconfigure.window != windows->command.id) 30513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 30523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->xconfigure.send_event != 0) 30533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 30543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.x=event->xconfigure.x; 30553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.y=event->xconfigure.y; 30563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 30573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((event->xconfigure.width == (int) windows->command.width) && 30583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (event->xconfigure.height == (int) windows->command.height)) 30593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 30603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.width=(unsigned int) 30613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event->xconfigure.width,(int) windows->command.min_width); 30623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.height=(unsigned int) 30633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event->xconfigure.height,(int) windows->command.min_height); 30643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateConfigurationState; 30653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 30663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 30673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case Expose: 30683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 30693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->xexpose.window != windows->command.id) 30703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 30713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event->xexpose.count != 0) 30723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 30733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawWidgetState; 30743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 30753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 30763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MotionNotify: 30773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 30783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 30793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Return the ID of the highlighted menu entry. 30803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 30813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for ( ; ; ) 30823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 30833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) number_selections; i++) 30843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 30853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (i >= (int) windows->command.data) 30863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 30873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (selection_info[i].raised == 30883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MatteIsActive(selection_info[i],event->xmotion)) 30893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 30903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 30913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Button status changed. 30923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 30933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info[i].raised=!selection_info[i].raised; 30943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->command, 30953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &selection_info[i]); 30963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 30973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 30983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 30993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(selection_info[i],event->xmotion) == MagickFalse) 31003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 31013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy submenu_info=selection_info[i]; 31023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy submenu_info.active=MagickTrue; 31033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy toggle_info.raised=MagickTrue; 31043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy toggle_info.y=submenu_info.y+(submenu_info.height >> 1)- 31053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (toggle_info.height >> 1); 31063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleEast(display,&windows->command,&toggle_info); 31073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=i; 31083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 31093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDelay(display,SuspendTime); 31103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XCheckMaskEvent(display,ButtonMotionMask,event) == MagickFalse) 31113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 31123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckMaskEvent(display,ButtonMotionMask,event)) ; 31133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy toggle_info.raised=MagickFalse; 31143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->command.data != 0) 31153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleEast(display,&windows->command,&toggle_info); 31163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 31173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 31183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 31193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MapNotify: 31203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 31213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.mapped=MagickTrue; 31223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 31233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 31243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case UnmapNotify: 31253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 31263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.mapped=MagickFalse; 31273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 31283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 31293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 31303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 31313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 31323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & UpdateConfigurationState) 31333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 31343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 31353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize button information. 31363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 31373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(selections != (const char **) NULL); 31383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=tile_height+20; 31393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) number_selections; i++) 31403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 31413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(selections[i],&selection_info[i]); 31423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info[i].center=MagickFalse; 31433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info[i].bevel_width--; 31443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info[i].height=(unsigned int) ((3*height) >> 1); 31453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info[i].x=(QuantumMargin >> 1)+4; 314658a749ec1fc5d48a2ea305d892aa6004454bb5eacristy selection_info[i].width=(unsigned int) (windows->command.width- 314758a749ec1fc5d48a2ea305d892aa6004454bb5eacristy (selection_info[i].x << 1)); 31483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info[i].y=y; 31493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y+=selection_info[i].height+(selection_info[i].bevel_width << 1)+6; 31503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 31513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&toggle_info); 31523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy toggle_info.bevel_width--; 315358a749ec1fc5d48a2ea305d892aa6004454bb5eacristy toggle_info.width=(unsigned int) (((5*height) >> 3)- 315458a749ec1fc5d48a2ea305d892aa6004454bb5eacristy (toggle_info.bevel_width << 1)); 31553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy toggle_info.height=toggle_info.width; 31563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy toggle_info.x=selection_info[0].x+selection_info[0].width- 31573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy toggle_info.width-(QuantumMargin >> 1); 31583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->command.mapped) 31593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XClearWindow(display,windows->command.id); 31603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 31613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawWidgetState) 31623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 31633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Pixmap 31643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy tile_pixmap; 31653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 31663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 31673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw command buttons. 31683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 31693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy tile_pixmap=XCreatePixmapFromBitmapData(display,windows->command.id, 31703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (char *) tile_bits,tile_width,tile_height,1L,0L,1); 31713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (tile_pixmap != (Pixmap) NULL) 31723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 31733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCopyPlane(display,tile_pixmap,windows->command.id, 31743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.annotate_context,0,0,tile_width,tile_height, 31753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) ((windows->command.width-tile_width) >> 1),10,1L); 31763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreePixmap(display,tile_pixmap); 31773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 31783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) number_selections; i++) 31793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 31803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->command,&selection_info[i]); 31813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (i >= (int) windows->command.data) 31823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 318376d2c94c9542343414bacbd8a5f7ff4f62a70723cristy toggle_info.raised=MagickFalse; 318458a749ec1fc5d48a2ea305d892aa6004454bb5eacristy toggle_info.y=selection_info[i].y+(selection_info[i].height >> 1)- 318558a749ec1fc5d48a2ea305d892aa6004454bb5eacristy (toggle_info.height >> 1); 31863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleEast(display,&windows->command,&toggle_info); 31873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 31883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XHighlightWidget(display,&windows->command,BorderOffset,BorderOffset); 31893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 31903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(id); 31913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 31923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 31933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 31943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 31953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 31963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 31973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 31983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X C o n f i r m W i d g e t % 31993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 32003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 32013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 32023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 32033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XConfirmWidget() displays a Confirm widget with a notice to the user. The 32053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% function returns -1 if Dismiss is pressed, 0 for Cancel, and 1 for Yes. 32063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XConfirmWidget method is: 32083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% int XConfirmWidget(Display *display,XWindows *windows, 32103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *reason,const char *description) 32113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 32133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 32153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 32163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindows structure. 32183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reason: Specifies the message to display before terminating the 32203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% program. 32213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o description: Specifies any description to the message. 32233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 32243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 3225bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate int XConfirmWidget(Display *display,XWindows *windows, 32263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *reason,const char *description) 32273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 32283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define CancelButtonText "Cancel" 32293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define DismissButtonText "Dismiss" 32303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define YesButtonText "Yes" 32313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 32323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 32333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy confirm, 32343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x, 32353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 32363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 32373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 32383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 32393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 32403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 32413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 32423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 32433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3244bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 32453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state; 32463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 32473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEvent 32483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event; 32493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 32503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 32513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info; 32523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 32533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XTextProperty 32543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_name; 32553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 32563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWidgetInfo 32573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info, 32583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info, 32593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy yes_info; 32603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 32613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowChanges 32623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes; 32633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 32643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 32653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine Confirm widget attributes. 32663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 32673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 32683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 32693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(reason != (char *) NULL); 32703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(description != (char *) NULL); 32713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",reason); 32723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 32733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=windows->widget.font_info; 32743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,CancelButtonText); 32753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,DismissButtonText) > width) 32763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,DismissButtonText); 32773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,YesButtonText) > width) 32783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,YesButtonText); 32793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width<<=1; 32803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (description != (char *) NULL) 32813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,(char *) description) > width) 32823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,(char *) description); 32833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) (font_info->ascent+font_info->descent); 32843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 32853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Position Confirm widget. 32863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 32873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=(unsigned int) (width+9*QuantumMargin); 32883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_width=(unsigned int) (9*QuantumMargin+ 32893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy WidgetTextWidth(font_info,CancelButtonText)+ 32903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy WidgetTextWidth(font_info,DismissButtonText)+ 32913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy WidgetTextWidth(font_info,YesButtonText)); 32923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.width < windows->widget.min_width) 32933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=windows->widget.min_width; 32943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) (12*height); 32953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_height=(unsigned int) (7*height); 32963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.height < windows->widget.min_height) 32973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=windows->widget.min_height; 32983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XConstrainWindowPosition(display,&windows->widget); 32993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 33003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Map Confirm widget. 33013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 3302151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(windows->widget.name,"Confirm",MagickPathExtent); 33033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XStringListToTextProperty(&windows->widget.name,1,&window_name); 33043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 33053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 33063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMName(display,windows->widget.id,&window_name); 33073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMIconName(display,windows->widget.id,&window_name); 33083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) window_name.value); 33093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 33103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.width=(int) windows->widget.width; 33113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.height=(int) windows->widget.height; 33123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.x=windows->widget.x; 33133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.y=windows->widget.y; 33143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XReconfigureWMWindow(display,windows->widget.id,windows->widget.screen, 33153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) (CWWidth | CWHeight | CWX | CWY),&window_changes); 33163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XMapRaised(display,windows->widget.id); 33173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.mapped=MagickFalse; 33183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 33193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to X events. 33203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 33213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy confirm=0; 33223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state=UpdateConfigurationState; 33233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickTrue); 33243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 33253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 33263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & UpdateConfigurationState) 33273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 33283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 33293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize button information. 33303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 33313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(CancelButtonText,&cancel_info); 33323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.width=(unsigned int) QuantumMargin+ 33333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy WidgetTextWidth(font_info,CancelButtonText); 33343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.height=(unsigned int) ((3*height) >> 1); 33353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.x=(int) (windows->widget.width-cancel_info.width- 33363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy QuantumMargin); 33373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.y=(int) (windows->widget.height-(cancel_info.height << 1)); 33383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info=cancel_info; 33393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.text=(char *) DismissButtonText; 33403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(description,"Do you want to save it") == 0) 33413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.text=(char *) "Don't Save"; 33423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.width=(unsigned int) QuantumMargin+ 33433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy WidgetTextWidth(font_info,dismiss_info.text); 33443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.x=(int) 33453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((windows->widget.width >> 1)-(dismiss_info.width >> 1)); 33463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy yes_info=cancel_info; 33473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy yes_info.text=(char *) YesButtonText; 33483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(description,"Do you want to save it") == 0) 33493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy yes_info.text=(char *) "Save"; 33503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy yes_info.width=(unsigned int) QuantumMargin+ 33513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy WidgetTextWidth(font_info,yes_info.text); 33523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (yes_info.width < cancel_info.width) 33533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy yes_info.width=cancel_info.width; 33543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy yes_info.x=QuantumMargin; 33553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~UpdateConfigurationState); 33563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 33573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawWidgetState) 33583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 33593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 33603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw Confirm widget. 33613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 33623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,(char *) reason); 33633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=(int) ((windows->widget.width >> 1)-(width >> 1)); 33643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=(int) ((windows->widget.height >> 1)-(height << 1)); 33653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawString(display,windows->widget.id, 33663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.annotate_context,x,y,(char *) reason,Extent(reason)); 33673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (description != (char *) NULL) 33683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 33693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 3370151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy question[MagickPathExtent]; 33713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3372151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(question,description,MagickPathExtent); 3373151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(question,"?",MagickPathExtent); 33743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,question); 33753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=(int) ((windows->widget.width >> 1)-(width >> 1)); 33763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y+=height; 33773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawString(display,windows->widget.id, 33783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.annotate_context,x,y,question,Extent(question)); 33793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 33803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 33813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&dismiss_info); 33823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&yes_info); 33833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XHighlightWidget(display,&windows->widget,BorderOffset,BorderOffset); 33843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawWidgetState); 33853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 33863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 33873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Wait for next event. 33883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 33893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XIfEvent(display,&event,XScreenEvent,(char *) windows); 33903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (event.type) 33913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 33923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonPress: 33933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 33943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(cancel_info,event.xbutton)) 33953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 33963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 33973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed No button. 33983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 33993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=MagickFalse; 34003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 34013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(dismiss_info,event.xbutton)) 34043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 34063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Dismiss button. 34073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 34083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.raised=MagickFalse; 34093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&dismiss_info); 34103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(yes_info,event.xbutton)) 34133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 34153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Yes button. 34163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 34173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy yes_info.raised=MagickFalse; 34183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&yes_info); 34193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonRelease: 34243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.mapped == MagickFalse) 34263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (cancel_info.raised == MagickFalse) 34283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 34303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(cancel_info,event.xbutton)) 34313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy confirm=0; 34333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 34343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=MagickTrue; 34363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 34373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (dismiss_info.raised == MagickFalse) 34393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 34413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(dismiss_info,event.xbutton)) 34423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy confirm=(-1); 34443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 34453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.raised=MagickTrue; 34473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&dismiss_info); 34483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (yes_info.raised == MagickFalse) 34503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 34523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(yes_info,event.xbutton)) 34533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy confirm=1; 34553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 34563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy yes_info.raised=MagickTrue; 34583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&yes_info); 34593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ClientMessage: 34633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 34653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy If client window delete message, exit. 34663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 34673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.message_type != windows->wm_protocols) 34683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l == (int) windows->wm_take_focus) 34703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetInputFocus(display,event.xclient.window,RevertToParent, 34723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (Time) event.xclient.data.l[1]); 34733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l != (int) windows->wm_delete_window) 34763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.window == windows->widget.id) 34783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 34803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 34843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ConfigureNotify: 34853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 34863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 34873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update widget configuration. 34883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 34893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xconfigure.window != windows->widget.id) 34903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((event.xconfigure.width == (int) windows->widget.width) && 34923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (event.xconfigure.height == (int) windows->widget.height)) 34933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 34943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=(unsigned int) 34953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.width,(int) windows->widget.min_width); 34963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) 34973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.height,(int) windows->widget.min_height); 34983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateConfigurationState; 34993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 35013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case EnterNotify: 35023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 35033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 35043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~InactiveWidgetState); 35063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 35083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case Expose: 35093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 35103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.window != windows->widget.id) 35113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.count != 0) 35133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawWidgetState; 35153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 35173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyPress: 35183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 35193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 3520151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy command[MagickPathExtent]; 35213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 35223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static KeySym 35233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy key_symbol; 35243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 35253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 35263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to a user key press. 35273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 35283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xkey.window != windows->widget.id) 35293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XLookupString((XKeyEvent *) &event.xkey,command, 35313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) sizeof(command),&key_symbol,(XComposeStatus *) NULL); 35323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((key_symbol == XK_Return) || (key_symbol == XK_KP_Enter)) 35333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 35343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy yes_info.raised=MagickFalse; 35353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&yes_info); 35363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy confirm=1; 35373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 35383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 35403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 35423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case LeaveNotify: 35433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 35443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 35453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=InactiveWidgetState; 35473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 35493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MotionNotify: 35503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 35513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 35523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Discard pending button motion events. 35533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 35543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckMaskEvent(display,ButtonMotionMask,&event)) ; 35553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & InactiveWidgetState) 35563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (cancel_info.raised == MatteIsActive(cancel_info,event.xmotion)) 35583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 35593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 35603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Cancel button status changed. 35613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 35623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=cancel_info.raised == MagickFalse ? 35633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 35643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 35653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 35673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (dismiss_info.raised == MatteIsActive(dismiss_info,event.xmotion)) 35683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 35693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 35703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Dismiss button status changed. 35713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 35724d0ca34912f861b25e5ed95e3f624048cb180358cristy dismiss_info.raised=dismiss_info.raised == MagickFalse ? 35733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 35743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&dismiss_info); 35753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 35773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (yes_info.raised == MatteIsActive(yes_info,event.xmotion)) 35783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 35793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 35803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Yes button status changed. 35813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 35823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy yes_info.raised=yes_info.raised == MagickFalse ? 35833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 35843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&yes_info); 35853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 35873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 35893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 35903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 35913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 35923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } while ((state & ExitState) == 0); 35933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickFalse); 35943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XWithdrawWindow(display,windows->widget.id,windows->widget.screen); 35953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 35963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(confirm); 35973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 35983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 35993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 36003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 36013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 36023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 36033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 36043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X D i a l o g W i d g e t % 36053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 36063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 36073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 36083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 36093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XDialogWidget() displays a Dialog widget with a query to the user. The user 36113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% keys a reply and presses the Ok or Cancel button to exit. The typed text is 36123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% returned as the reply function parameter. 36133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XDialogWidget method is: 36153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% int XDialogWidget(Display *display,XWindows *windows,const char *action, 36173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *query,char *reply) 36183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 36203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 36223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 36233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindows structure. 36253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o action: Specifies a pointer to the action of this widget. 36273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o query: Specifies a pointer to the query to present to the user. 36293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reply: the response from the user is returned in this parameter. 36313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 36323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 3633bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate int XDialogWidget(Display *display,XWindows *windows, 36343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *action,const char *query,char *reply) 36353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 36363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define CancelButtonText "Cancel" 36373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 3639151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy primary_selection[MagickPathExtent]; 36403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 36423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 36433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 36453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 36463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static MagickBooleanType 36483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy raised = MagickFalse; 36493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 36513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 36523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 36543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy anomaly, 36553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 36563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 36573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3658bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 36593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state; 36603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEvent 36623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event; 36633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 36653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info; 36663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XTextProperty 36683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_name; 36693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWidgetInfo 36713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info, 36723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info, 36733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info, 36743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info, 36753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info; 36763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowChanges 36783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes; 36793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 36803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 36813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine Dialog widget attributes. 36823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 36833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 36843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 36853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(action != (char *) NULL); 36863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(query != (char *) NULL); 36873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(reply != (char *) NULL); 36883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",action); 36893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 36903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=windows->widget.font_info; 36913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,(char *) action); 36923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,CancelButtonText) > width) 36933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,CancelButtonText); 36943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width+=(3*QuantumMargin) >> 1; 36953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) (font_info->ascent+font_info->descent); 36963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 36973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Position Dialog widget. 36983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 369949e2d862ad0faa61d99d9d252f75913ad3976750cristy windows->widget.width=(unsigned int) MagickMax((int) (2*width),(int) 370049e2d862ad0faa61d99d9d252f75913ad3976750cristy WidgetTextWidth(font_info,(char *) query)); 37013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.width < WidgetTextWidth(font_info,reply)) 37023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=WidgetTextWidth(font_info,reply); 37033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width+=6*QuantumMargin; 37043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_width=(unsigned int) 37053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (width+28*XTextWidth(font_info,"#",1)+4*QuantumMargin); 37063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.width < windows->widget.min_width) 37073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=windows->widget.min_width; 37083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) (7*height+(QuantumMargin << 1)); 37093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_height=windows->widget.height; 37103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.height < windows->widget.min_height) 37113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=windows->widget.min_height; 37123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XConstrainWindowPosition(display,&windows->widget); 37133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 37143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Map Dialog widget. 37153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 3716151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(windows->widget.name,"Dialog",MagickPathExtent); 37173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XStringListToTextProperty(&windows->widget.name,1,&window_name); 37183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 37193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 37203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMName(display,windows->widget.id,&window_name); 37213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMIconName(display,windows->widget.id,&window_name); 37223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) window_name.value); 37233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 37243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.width=(int) windows->widget.width; 37253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.height=(int) windows->widget.height; 37263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.x=windows->widget.x; 37273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.y=windows->widget.y; 37283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XReconfigureWMWindow(display,windows->widget.id,windows->widget.screen, 37293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) (CWWidth | CWHeight | CWX | CWY),&window_changes); 37303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XMapRaised(display,windows->widget.id); 37313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.mapped=MagickFalse; 37323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 37333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to X events. 37343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 37353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy anomaly=(LocaleCompare(action,"Background") == 0) || 37363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (LocaleCompare(action,"New") == 0) || 37373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (LocaleCompare(action,"Quantize") == 0) || 37383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (LocaleCompare(action,"Resize") == 0) || 37393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (LocaleCompare(action,"Save") == 0) || 37403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (LocaleCompare(action,"Shade") == 0); 37413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state=UpdateConfigurationState; 37423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickTrue); 37433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 37443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 37453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & UpdateConfigurationState) 37463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 37473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 37483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize button information. 37493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 37503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(CancelButtonText,&cancel_info); 37513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.width=width; 37523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.height=(unsigned int) ((3*height) >> 1); 37533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.x=(int) 37543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (windows->widget.width-cancel_info.width-((3*QuantumMargin) >> 1)); 37553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.y=(int) 37563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (windows->widget.height-cancel_info.height-((3*QuantumMargin) >> 1)); 37573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(action,&action_info); 37583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.width=width; 37593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.height=(unsigned int) ((3*height) >> 1); 37603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.x=cancel_info.x-(cancel_info.width+QuantumMargin+ 37613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (action_info.bevel_width << 1)); 37623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.y=cancel_info.y; 37633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 37643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize reply information. 37653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 37663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(reply,&reply_info); 37673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.raised=MagickFalse; 37683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.bevel_width--; 37693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.width=windows->widget.width-(3*QuantumMargin); 37703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.height=height << 1; 37713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.x=(3*QuantumMargin) >> 1; 37723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.y=action_info.y-reply_info.height-QuantumMargin; 37733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 37743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize option information. 37753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 37763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo("Dither",&special_info); 37773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.raised=raised; 37783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.bevel_width--; 37793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.width=(unsigned int) QuantumMargin >> 1; 37803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.height=(unsigned int) QuantumMargin >> 1; 37813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.x=reply_info.x; 37823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.y=action_info.y+action_info.height-special_info.height; 37833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(action,"Background") == 0) 37843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.text=(char *) "Backdrop"; 37853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(action,"New") == 0) 37863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.text=(char *) "Gradation"; 37873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(action,"Resize") == 0) 37883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.text=(char *) "Constrain ratio"; 37893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(action,"Save") == 0) 37903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.text=(char *) "Non-progressive"; 37913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(action,"Shade") == 0) 37923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.text=(char *) "Color shading"; 37933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 37943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize text information. 37953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 37963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(query,&text_info); 37973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.width=reply_info.width; 37983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.height=height; 37993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.x=reply_info.x-(QuantumMargin >> 1); 38003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.y=QuantumMargin; 38013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.center=MagickFalse; 38023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~UpdateConfigurationState); 38033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 38043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawWidgetState) 38053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 38063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 38073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw Dialog widget. 38083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 38093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&text_info); 38103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,&windows->widget,&reply_info); 38113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 38123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (anomaly) 38133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&special_info); 38143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 38153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 38163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XHighlightWidget(display,&windows->widget,BorderOffset,BorderOffset); 38173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawWidgetState); 38183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 38193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 38203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Wait for next event. 38213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 38223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XIfEvent(display,&event,XScreenEvent,(char *) windows); 38233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (event.type) 38243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 38253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonPress: 38263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 38273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (anomaly) 38283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(special_info,event.xbutton)) 38293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 38303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 38313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Option button status changed. 38323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 38333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.raised=!special_info.raised; 38343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&special_info); 38353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 38363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 38373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(action_info,event.xbutton)) 38383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 38393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 38403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Action button. 38413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 38423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickFalse; 38433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 38443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 38453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 38463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(cancel_info,event.xbutton)) 38473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 38483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 38493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Cancel button. 38503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 38513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=MagickFalse; 38523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 38533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 38543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 38553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(reply_info,event.xbutton) == MagickFalse) 38563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 38573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.button != Button2) 38583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 38593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static Time 38603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy click_time; 38613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 38623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 38633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move text cursor to position of button press. 38643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 38653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=event.xbutton.x-reply_info.x-(QuantumMargin >> 2); 38663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=1; i <= Extent(reply_info.marker); i++) 38673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XTextWidth(font_info,reply_info.marker,i) > x) 38683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 38693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.marker+i-1; 38703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.time > (click_time+DoubleClick)) 38713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 38723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 38733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 38743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 38753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Become the XA_PRIMARY selection owner. 38763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 38773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(primary_selection,reply_info.text, 3878151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 38793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetSelectionOwner(display,XA_PRIMARY,windows->widget.id, 38803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event.xbutton.time); 38813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=XGetSelectionOwner(display,XA_PRIMARY) == 38823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.id ? MagickTrue : MagickFalse; 38833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 38843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 38853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy click_time=event.xbutton.time; 38863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 38873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 38883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 38893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Request primary selection. 38903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 38913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XConvertSelection(display,XA_PRIMARY,XA_STRING,XA_STRING, 38923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.id,event.xbutton.time); 38933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 38943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 38953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonRelease: 38963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 38973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.mapped == MagickFalse) 38983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 38993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (action_info.raised == MagickFalse) 39003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 39013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 39023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(action_info,event.xbutton)) 39033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 39043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickTrue; 39053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 39063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (cancel_info.raised == MagickFalse) 39083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 39093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 39103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(cancel_info,event.xbutton)) 39113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 39123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 39133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 39143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=MagickTrue; 39163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 39173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ClientMessage: 39213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 39223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 39233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy If client window delete message, exit. 39243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 39253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.message_type != windows->wm_protocols) 39263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l == (int) windows->wm_take_focus) 39283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 39293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetInputFocus(display,event.xclient.window,RevertToParent, 39303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (Time) event.xclient.data.l[1]); 39313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l != (int) windows->wm_delete_window) 39343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.window == windows->widget.id) 39363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 39373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 39383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 39393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ConfigureNotify: 39443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 39453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 39463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update widget configuration. 39473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 39483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xconfigure.window != windows->widget.id) 39493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((event.xconfigure.width == (int) windows->widget.width) && 39513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (event.xconfigure.height == (int) windows->widget.height)) 39523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=(unsigned int) 39543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.width,(int) windows->widget.min_width); 39553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) 39563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.height,(int) windows->widget.min_height); 39573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateConfigurationState; 39583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case EnterNotify: 39613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 39623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 39633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~InactiveWidgetState); 39653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case Expose: 39683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 39693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.window != windows->widget.id) 39703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.count != 0) 39723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawWidgetState; 39743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 39763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyPress: 39773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 39783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 3979151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy command[MagickPathExtent]; 39803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 39813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static int 39823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 39833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 39843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static KeySym 39853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy key_symbol; 39863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 39873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 39883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to a user key press. 39893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 39903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xkey.window != windows->widget.id) 39913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 39923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=XLookupString((XKeyEvent *) &event.xkey,command, 39933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) sizeof(command),&key_symbol,(XComposeStatus *) NULL); 39943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *(command+length)='\0'; 39953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((key_symbol == XK_Return) || (key_symbol == XK_KP_Enter)) 39963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 39973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickFalse; 39983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 39993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 40003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 40013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 40023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (key_symbol == XK_Control_L) 40033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 40043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ControlState; 40053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 40063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 40073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & ControlState) 40083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch ((int) key_symbol) 40093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 40103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_u: 40113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_U: 40123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 40133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 40143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Erase the entire line of text. 40153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 40163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 40173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.text; 40183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.marker=reply_info.text; 40193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 40203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 40213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 40223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 40233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 40243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 40253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEditText(display,&reply_info,key_symbol,command,state); 40263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 40273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 40283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 40293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyRelease: 40303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 40313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 4032151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy command[MagickPathExtent]; 40333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static KeySym 40353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy key_symbol; 40363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 40383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to a user key release. 40393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 40403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xkey.window != windows->widget.id) 40413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 40423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XLookupString((XKeyEvent *) &event.xkey,command, 40433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) sizeof(command),&key_symbol,(XComposeStatus *) NULL); 40443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (key_symbol == XK_Control_L) 40453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~ControlState); 40463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 40473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 40483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case LeaveNotify: 40493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 40503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 40513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 40523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=InactiveWidgetState; 40533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 40543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 40553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MotionNotify: 40563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 40573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 40583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Discard pending button motion events. 40593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 40603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckMaskEvent(display,ButtonMotionMask,&event)) ; 40613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & InactiveWidgetState) 40623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 40633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (action_info.raised == MatteIsActive(action_info,event.xmotion)) 40643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 40653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 40663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Action button status changed. 40673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 40683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=action_info.raised == MagickFalse ? 40693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 40703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 40713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 40723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 40733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (cancel_info.raised == MatteIsActive(cancel_info,event.xmotion)) 40743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 40753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 40763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Cancel button status changed. 40773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 40783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=cancel_info.raised == MagickFalse ? 40793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 40803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 40813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 40823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 40833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 40843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 40853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionClear: 40863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 40873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 40883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 40893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 40903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 40913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionNotify: 40923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 40933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Atom 40943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy type; 40953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 40973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy format; 40983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 40993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 41003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *data; 41013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4102f2faecf9facdbbb14fcba373365f9f691a9658e0cristy unsigned long 41033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy after, 41043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 41053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 41063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 41073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Obtain response from primary selection. 41083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 41093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xselection.property == (Atom) None) 41103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 41113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetWindowProperty(display,event.xselection.requestor, 41123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event.xselection.property,0L,2047L,MagickTrue,XA_STRING,&type, 41133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &format,&length,&after,&data); 41143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((status != Success) || (type != XA_STRING) || (format == 32) || 41153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (length == 0)) 41163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 4117151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if ((Extent(reply_info.text)+length) >= (MagickPathExtent-1)) 41183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XBell(display,0); 41193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 41203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 41213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 41223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Insert primary selection in reply text. 41233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 41243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *(data+length)='\0'; 41253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEditText(display,&reply_info,(KeySym) XK_Insert,(char *) data, 41263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state); 41273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 41283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 41293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) data); 41303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 41313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 41323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionRequest: 41333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 41343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSelectionEvent 41353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify; 41363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 41373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSelectionRequestEvent 41383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *request; 41393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 41403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reply_info.highlight == MagickFalse) 41413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 41423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 41433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set primary selection. 41443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 41453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy request=(&(event.xselectionrequest)); 41463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XChangeProperty(request->display,request->requestor, 41473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy request->property,request->target,8,PropModeReplace, 41483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned char *) primary_selection,Extent(primary_selection)); 41493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.type=SelectionNotify; 41503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.display=request->display; 41513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.requestor=request->requestor; 41523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.selection=request->selection; 41533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.target=request->target; 41543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.time=request->time; 41553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (request->property == None) 41563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.property=request->target; 41573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 41583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.property=request->property; 41593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSendEvent(request->display,request->requestor,False,0, 41603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (XEvent *) ¬ify); 41613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 41623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 41633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 41643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 41653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } while ((state & ExitState) == 0); 41663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickFalse); 41673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XWithdrawWindow(display,windows->widget.id,windows->widget.screen); 41683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 41693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (anomaly) 41703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (special_info.raised) 41713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*reply != '\0') 41723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy raised=MagickTrue; 41733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(raised == MagickFalse); 41743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 41753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 41763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 41773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 41783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 41793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 41803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 41813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X F i l e B r o w s e r W i d g e t % 41823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 41833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 41843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 41853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 41863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 41873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XFileBrowserWidget() displays a File Browser widget with a file query to the 41883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% user. The user keys a reply and presses the Action or Cancel button to 41893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% exit. The typed text is returned as the reply function parameter. 41903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 41913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XFileBrowserWidget method is: 41923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 41933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XFileBrowserWidget(Display *display,XWindows *windows, 41943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *action,char *reply) 41953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 41963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 41973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 41983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 41993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 42003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 42013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindows structure. 42023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 42033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o action: Specifies a pointer to the action of this widget. 42043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 42053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reply: the response from the user is returned in this parameter. 42063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 42073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 4208bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XFileBrowserWidget(Display *display,XWindows *windows, 42093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *action,char *reply) 42103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 42113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define CancelButtonText "Cancel" 42123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define DirectoryText "Directory:" 42133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define FilenameText "File name:" 42143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define GrabButtonText "Grab" 42153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define FormatButtonText "Format" 42163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define HomeButtonText "Home" 42173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define UpButtonText "Up" 42183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 422000976d8abcff7a3bc7b986b8105dde8d091dee61cristy *directory, 42213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **filelist, 4222151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy home_directory[MagickPathExtent], 4223151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy primary_selection[MagickPathExtent], 4224151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy text[MagickPathExtent], 4225151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy working_path[MagickPathExtent]; 42263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 42283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x, 42293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 42303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4231ecd0ab5350482e4a2ea003705e3e0b2120b66384cristy register ssize_t 42323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 42333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 4235151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy glob_pattern[MagickPathExtent] = "*", 4236151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy format[MagickPathExtent] = "miff"; 42373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static MagickStatusType 42393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask = (MagickStatusType) (CWWidth | CWHeight | CWX | CWY); 42403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 42423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 42433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 42453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy anomaly, 42463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 42473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width, 42483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visible_files, 42493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 42503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4251bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 42523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay, 42533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy files, 42543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state; 42553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEvent 42573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event; 42583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 42603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info; 42613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XTextProperty 42633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_name; 42643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWidgetInfo 42663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info, 42673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info, 42683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info, 42693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info, 42703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info, 42713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy home_info, 42723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info, 42733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info, 42743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info, 42753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info, 42763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info, 42773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info, 42783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info, 42793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy up_info; 42803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowChanges 42823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes; 42833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 42843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 42853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Read filelist from current directory. 42863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 42873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 42883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 42893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(action != (char *) NULL); 42903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(reply != (char *) NULL); 42913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",action); 42923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickTrue); 42933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 4294151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy directory=getcwd(home_directory,MagickPathExtent); 429500976d8abcff7a3bc7b986b8105dde8d091dee61cristy (void) directory; 4296151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(working_path,home_directory,MagickPathExtent); 42973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy filelist=ListFiles(working_path,glob_pattern,&files); 42983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (filelist == (char **) NULL) 42993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 43003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 43013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Directory read failed. 43023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 43033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XNoticeWidget(display,windows,"Unable to read directory:",working_path); 43043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDialogWidget(display,windows,action,"Enter filename:",reply); 43053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 43063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 43073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 43083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine File Browser widget attributes. 43093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 43103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=windows->widget.font_info; 43113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width=0; 4312bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) files; i++) 43133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,filelist[i]) > text_width) 43143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width=WidgetTextWidth(font_info,filelist[i]); 43153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,(char *) action); 43163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,GrabButtonText) > width) 43173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,GrabButtonText); 43183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,FormatButtonText) > width) 43193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,FormatButtonText); 43203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,CancelButtonText) > width) 43213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,CancelButtonText); 43223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,HomeButtonText) > width) 43233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,HomeButtonText); 43243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,UpButtonText) > width) 43253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,UpButtonText); 43263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width+=QuantumMargin; 43273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,DirectoryText) > width) 43283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,DirectoryText); 43293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,FilenameText) > width) 43303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,FilenameText); 43313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) (font_info->ascent+font_info->descent); 43323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 43333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Position File Browser widget. 43343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 43353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=width+MagickMin((int) text_width,(int) MaxTextWidth)+ 43363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6*QuantumMargin; 43373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_width=width+MinTextWidth+4*QuantumMargin; 43383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.width < windows->widget.min_width) 43393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=windows->widget.min_width; 43403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) 43413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (((81*height) >> 2)+((13*QuantumMargin) >> 1)+4); 43423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_height=(unsigned int) 43433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (((23*height) >> 1)+((13*QuantumMargin) >> 1)+4); 43443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.height < windows->widget.min_height) 43453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=windows->widget.min_height; 43463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XConstrainWindowPosition(display,&windows->widget); 43473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 43483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Map File Browser widget. 43493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 43503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(windows->widget.name,"Browse and Select a File", 4351151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 43523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XStringListToTextProperty(&windows->widget.name,1,&window_name); 43533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 43543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 43553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMName(display,windows->widget.id,&window_name); 43563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMIconName(display,windows->widget.id,&window_name); 43573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) window_name.value); 43583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 43593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.width=(int) windows->widget.width; 43603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.height=(int) windows->widget.height; 43613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.x=windows->widget.x; 43623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.y=windows->widget.y; 43633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XReconfigureWMWindow(display,windows->widget.id, 43643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.screen,mask,&window_changes); 43653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XMapRaised(display,windows->widget.id); 43663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.mapped=MagickFalse; 43673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 43683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to X events. 43693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 43703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&slider_info); 43713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&north_info); 43723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&south_info); 43733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&expose_info); 43743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visible_files=0; 43753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy anomaly=(LocaleCompare(action,"Composite") == 0) || 43763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (LocaleCompare(action,"Open") == 0) || (LocaleCompare(action,"Map") == 0); 43773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply='\0'; 43783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime << 2; 43793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state=UpdateConfigurationState; 43803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 43813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 43823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & UpdateConfigurationState) 43833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 43843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 43853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id; 43863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 43873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 43883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize button information. 43893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 43903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(CancelButtonText,&cancel_info); 43913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.width=width; 43923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.height=(unsigned int) ((3*height) >> 1); 43933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.x=(int) 43943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (windows->widget.width-cancel_info.width-QuantumMargin-2); 43953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.y=(int) 43963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (windows->widget.height-cancel_info.height-QuantumMargin); 43973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(action,&action_info); 43983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.width=width; 43993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.height=(unsigned int) ((3*height) >> 1); 44003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.x=cancel_info.x-(cancel_info.width+(QuantumMargin >> 1)+ 44013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (action_info.bevel_width << 1)); 44023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.y=cancel_info.y; 44033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(GrabButtonText,&special_info); 44043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.width=width; 44053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.height=(unsigned int) ((3*height) >> 1); 44063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.x=action_info.x-(action_info.width+(QuantumMargin >> 1)+ 44073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (special_info.bevel_width << 1)); 44083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.y=action_info.y; 44093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (anomaly == MagickFalse) 44103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 44113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 44123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 44133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 44143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.text=(char *) FormatButtonText; 44153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=reply+Extent(reply)-1; 44163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((p > (reply+1)) && (*(p-1) != '.')) 44173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p--; 44183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((p > (reply+1)) && (*(p-1) == '.')) 4419151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(format,p,MagickPathExtent); 44203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 44213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(UpButtonText,&up_info); 44223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy up_info.width=width; 44233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy up_info.height=(unsigned int) ((3*height) >> 1); 44243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy up_info.x=QuantumMargin; 44253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy up_info.y=((5*QuantumMargin) >> 1)+height; 44263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(HomeButtonText,&home_info); 44273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy home_info.width=width; 44283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy home_info.height=(unsigned int) ((3*height) >> 1); 44293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy home_info.x=QuantumMargin; 44303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy home_info.y=up_info.y+up_info.height+QuantumMargin; 44313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 44323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize reply information. 44333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 44343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(reply,&reply_info); 44353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.raised=MagickFalse; 44363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.bevel_width--; 44373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.width=windows->widget.width-width-((6*QuantumMargin) >> 1); 44383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.height=height << 1; 44393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.x=(int) (width+(QuantumMargin << 1)); 44403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.y=action_info.y-reply_info.height-QuantumMargin; 44413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 44423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize scroll information. 44433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 44443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&scroll_info); 44453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.bevel_width--; 44463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.width=height; 44473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.height=(unsigned int) 44483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (reply_info.y-up_info.y-(QuantumMargin >> 1)); 44493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.x=reply_info.x+(reply_info.width-scroll_info.width); 44503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.y=up_info.y-reply_info.bevel_width; 44513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.raised=MagickFalse; 44523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.trough=MagickTrue; 44533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info=scroll_info; 44543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.raised=MagickTrue; 44553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.width-=(north_info.bevel_width << 1); 44563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.height=north_info.width-1; 44573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.x+=north_info.bevel_width; 44583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.y+=north_info.bevel_width; 44593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info=north_info; 44603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.y=scroll_info.y+scroll_info.height-scroll_info.bevel_width- 44613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.height; 44623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=slider_info.id; 44633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info=north_info; 44643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=id; 44653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.width-=2; 44663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.min_y=north_info.y+north_info.height+north_info.bevel_width+ 44673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width+2; 44683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.height=scroll_info.height-((slider_info.min_y- 44693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.y+1) << 1)+4; 44703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visible_files=scroll_info.height/(height+(height >> 3)); 44713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (files > visible_files) 44723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.height=(unsigned int) 44733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((visible_files*slider_info.height)/files); 44743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.max_y=south_info.y-south_info.bevel_width- 44753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width-2; 44763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.x=scroll_info.x+slider_info.bevel_width+1; 44773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 44783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info=scroll_info; 44793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y; 44803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 44813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize list information. 44823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 44833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&list_info); 44843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.raised=MagickFalse; 44853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.bevel_width--; 44863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.width=(unsigned int) 44873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (scroll_info.x-reply_info.x-(QuantumMargin >> 1)); 44883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.height=scroll_info.height; 44893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.x=reply_info.x; 44903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.y=scroll_info.y; 44913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.mapped == MagickFalse) 44923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=JumpListState; 44933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 44943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize text information. 44953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 44963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *text='\0'; 44973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(text,&text_info); 44983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.center=MagickFalse; 44993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.width=reply_info.width; 45003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.height=height; 45013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.x=list_info.x-(QuantumMargin >> 1); 45023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.y=QuantumMargin; 45033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 45043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize selection information. 45053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 45063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&selection_info); 45073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.center=MagickFalse; 45083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.width=list_info.width; 45093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.height=(unsigned int) ((9*height) >> 3); 45103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.x=list_info.x; 45113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~UpdateConfigurationState); 45123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 45133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawWidgetState) 45143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 45153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 45163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw File Browser window. 45173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 45183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=QuantumMargin; 45193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=text_info.y+((text_info.height-height) >> 1)+font_info->ascent; 45203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawString(display,windows->widget.id, 45213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.annotate_context,x,y,DirectoryText, 45223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Extent(DirectoryText)); 4523151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(text_info.text,working_path,MagickPathExtent); 45243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(text_info.text,DirectorySeparator, 4525151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 45263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(text_info.text,glob_pattern, 4527151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 45283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&text_info); 45293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&up_info); 45303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&home_info); 45313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,&windows->widget,&list_info); 45323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,&windows->widget,&scroll_info); 45333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,&windows->widget,&north_info); 45343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&slider_info); 45353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,&windows->widget,&south_info); 45363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=QuantumMargin; 45373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=reply_info.y+((reply_info.height-height) >> 1)+font_info->ascent; 45383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawString(display,windows->widget.id, 45393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.annotate_context,x,y,FilenameText, 45403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Extent(FilenameText)); 45413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,&windows->widget,&reply_info); 45423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 45433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&special_info); 45443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 45453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 45463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XHighlightWidget(display,&windows->widget,BorderOffset,BorderOffset); 45473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 45483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 45493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawWidgetState); 45503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 45513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & UpdateListState) 45523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 45533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 45543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **checklist; 45553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4556bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 45573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_files; 45583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 45593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 45603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update file list. 45613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 45623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy checklist=ListFiles(working_path,glob_pattern,&number_files); 45633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (checklist == (char **) NULL) 45643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 45653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 45663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Reply is a filename, exit. 45673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 45683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickFalse; 45693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 45703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 45713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4572bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) files; i++) 45733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy filelist[i]=DestroyString(filelist[i]); 45743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (filelist != (char **) NULL) 45753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy filelist=(char **) RelinquishMagickMemory(filelist); 45763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy filelist=checklist; 45773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy files=number_files; 45783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 45793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update file list. 45803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 45813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.height= 45823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.height-((slider_info.min_y-scroll_info.y+1) << 1)+1; 45833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (files > visible_files) 45843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.height=(unsigned int) 45853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((visible_files*slider_info.height)/files); 45863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.max_y=south_info.y-south_info.bevel_width- 45873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width-2; 45883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 45893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 45903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y; 45913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 45923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=(~0); 45933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 45943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 45953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw directory name & reply. 45963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 45973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (IsGlob(reply_info.text) == MagickFalse) 45983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 45993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 46003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.text; 46013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 4602151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(text_info.text,working_path,MagickPathExtent); 46033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(text_info.text,DirectorySeparator, 4604151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 46053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(text_info.text,glob_pattern, 4606151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 46073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&text_info); 46083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 46093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,&windows->widget,&scroll_info); 46103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,&windows->widget,&north_info); 46113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&slider_info); 46123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,&windows->widget,&south_info); 46133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XHighlightWidget(display,&windows->widget,BorderOffset,BorderOffset); 46143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~UpdateListState); 46153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 46163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & JumpListState) 46173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 46183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 46193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Jump scroll to match user filename. 46203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 46213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=(~0); 4622bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) files; i++) 46233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(filelist[i],reply) >= 0) 46243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 462549e2d862ad0faa61d99d9d252f75913ad3976750cristy list_info.id=(int) 462649e2d862ad0faa61d99d9d252f75913ad3976750cristy (LocaleCompare(filelist[i],reply) == 0 ? i : ~0); 46273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 46283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 462949e2d862ad0faa61d99d9d252f75913ad3976750cristy if ((i < (ssize_t) slider_info.id) || 463049e2d862ad0faa61d99d9d252f75913ad3976750cristy (i >= (ssize_t) (slider_info.id+visible_files))) 463149e2d862ad0faa61d99d9d252f75913ad3976750cristy slider_info.id=(int) i-(visible_files >> 1); 46323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 46333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 46343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~JumpListState); 46353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 46363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawListState) 46373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 46383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 46393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine slider id and position. 46403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 46413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id >= (int) (files-visible_files)) 46423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=(int) (files-visible_files); 46433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((slider_info.id < 0) || (files <= visible_files)) 46443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 46453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 46463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (files > 0) 4647dfe2b6658f367de8f84405263f62768fb853adafcristy slider_info.y+=(int) (slider_info.id*(slider_info.max_y- 46488891f9ce489d3e61399b60436ea6c62f5ed9b887cristy slider_info.min_y+1)/files); 46493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id != selection_info.id) 46503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 46513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 46523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw scroll bar and file names. 46533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 46543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=slider_info.id; 46553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y=list_info.y+(height >> 3)+2; 465649e2d862ad0faa61d99d9d252f75913ad3976750cristy for (i=0; i < (ssize_t) visible_files; i++) 46573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 465849e2d862ad0faa61d99d9d252f75913ad3976750cristy selection_info.raised=(int) (slider_info.id+i) != list_info.id ? 46593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 46603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=(char *) NULL; 4661bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy if ((slider_info.id+i) < (ssize_t) files) 46623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=filelist[slider_info.id+i]; 46633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&selection_info); 46643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y+=(int) selection_info.height; 46653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 46663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 46673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update slider. 46683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 46693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y > expose_info.y) 46703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 46713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.height=(unsigned int) slider_info.y-expose_info.y; 46723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y-expose_info.height- 46733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width-1; 46743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 46753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 46763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 46773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.height=(unsigned int) expose_info.y-slider_info.y; 46783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y+slider_info.height+ 46793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width+1; 46803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 46813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,&windows->widget,&north_info); 46823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatte(display,&windows->widget,&expose_info); 46833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&slider_info); 46843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,&windows->widget,&south_info); 46853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y; 46863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 46873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawListState); 46883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 46893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 46903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Wait for next event. 46913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 46923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (north_info.raised && south_info.raised) 46933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XIfEvent(display,&event,XScreenEvent,(char *) windows); 46943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 46953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 46963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 46973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Brief delay before advancing scroll bar. 46983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 46993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDelay(display,delay); 47003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime; 47013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckIfEvent(display,&event,XScreenEvent,(char *) windows); 47023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (north_info.raised == MagickFalse) 47033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id > 0) 47043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 47053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 47063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider up. 47073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 47083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id--; 47093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 47103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 47113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (south_info.raised == MagickFalse) 471249e2d862ad0faa61d99d9d252f75913ad3976750cristy if (slider_info.id < (int) files) 47133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 47143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 47153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider down. 47163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 47173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id++; 47183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 47193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 47203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.type != ButtonRelease) 47213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 47223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 47233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (event.type) 47243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 47253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonPress: 47263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 47273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(slider_info,event.xbutton)) 47283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 47293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 47303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Track slider. 47313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 47323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.active=MagickTrue; 47333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 47343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 47353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(north_info,event.xbutton)) 47363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id > 0) 47373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 47383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 47393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider up. 47403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 47413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.raised=MagickFalse; 47423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id--; 47433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 47443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 47453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 47463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(south_info,event.xbutton)) 474749e2d862ad0faa61d99d9d252f75913ad3976750cristy if (slider_info.id < (int) files) 47483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 47493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 47503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider down. 47513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 47523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.raised=MagickFalse; 47533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id++; 47543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 47553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 47563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 47573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(scroll_info,event.xbutton)) 47583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 47593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 47603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider. 47613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 47623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.y < slider_info.y) 47633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id-=(visible_files-1); 47643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 47653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id+=(visible_files-1); 47663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 47673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 47683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 47693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(list_info,event.xbutton)) 47703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 47713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 47723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id; 47733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 47743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 47753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed file matte. 47763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 47773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=slider_info.id+(event.xbutton.y-(list_info.y+(height >> 1))+1)/ 47783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.height; 477949e2d862ad0faa61d99d9d252f75913ad3976750cristy if (id >= (int) files) 47803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 4781151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(reply_info.text,filelist[id],MagickPathExtent); 47823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 47833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.marker=reply_info.text; 47843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.text+Extent(reply_info.text); 47853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 47863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (id == list_info.id) 47873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 47883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 47893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p; 47903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 47913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=reply_info.text+strlen(reply_info.text)-1; 47923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*p == *DirectorySeparator) 47933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ChopPathComponents(reply_info.text,1); 47943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(working_path,DirectorySeparator, 4795151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 47963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(working_path,reply_info.text, 4797151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 47983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply='\0'; 47993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateListState; 48003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 48013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 48023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=id; 48033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 48043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 48053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 48063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(up_info,event.xbutton)) 48073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 48083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 48093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Up button. 48103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 48113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy up_info.raised=MagickFalse; 48123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&up_info); 48133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 48143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 48153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(home_info,event.xbutton)) 48163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 48173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 48183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Home button. 48193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 48203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy home_info.raised=MagickFalse; 48213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&home_info); 48223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 48233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 48243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(special_info,event.xbutton)) 48253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 48263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 48273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Special button. 48283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 48293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.raised=MagickFalse; 48303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&special_info); 48313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 48323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 48333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(action_info,event.xbutton)) 48343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 48353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 48363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed action button. 48373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 48383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickFalse; 48393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 48403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 48413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 48423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(cancel_info,event.xbutton)) 48433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 48443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 48453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Cancel button. 48463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 48473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=MagickFalse; 48483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 48493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 48503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 48513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(reply_info,event.xbutton) == MagickFalse) 48523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 48533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.button != Button2) 48543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 48553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static Time 48563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy click_time; 48573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 48583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 48593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move text cursor to position of button press. 48603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 48613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=event.xbutton.x-reply_info.x-(QuantumMargin >> 2); 486249e2d862ad0faa61d99d9d252f75913ad3976750cristy for (i=1; i <= (ssize_t) Extent(reply_info.marker); i++) 486349e2d862ad0faa61d99d9d252f75913ad3976750cristy if (XTextWidth(font_info,reply_info.marker,(int) i) > x) 48643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 48653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.marker+i-1; 48663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.time > (click_time+DoubleClick)) 48673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 48683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 48693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 48703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 48713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Become the XA_PRIMARY selection owner. 48723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 48733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(primary_selection,reply_info.text, 4874151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 48753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetSelectionOwner(display,XA_PRIMARY,windows->widget.id, 48763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event.xbutton.time); 48773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=XGetSelectionOwner(display,XA_PRIMARY) == 48783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.id ? MagickTrue : MagickFalse; 48793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 48803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 48813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy click_time=event.xbutton.time; 48823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 48833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 48843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 48853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Request primary selection. 48863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 48873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XConvertSelection(display,XA_PRIMARY,XA_STRING,XA_STRING, 48883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.id,event.xbutton.time); 48893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 48903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 48913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonRelease: 48923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 48933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.mapped == MagickFalse) 48943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 48953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (north_info.raised == MagickFalse) 48963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 48973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 48983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User released up button. 48993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 49003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime << 2; 49013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.raised=MagickTrue; 49023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,&windows->widget,&north_info); 49033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (south_info.raised == MagickFalse) 49053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 49063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 49073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User released down button. 49083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 49093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime << 2; 49103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.raised=MagickTrue; 49113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,&windows->widget,&south_info); 49123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.active) 49143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 49153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 49163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Stop tracking slider. 49173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 49183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.active=MagickFalse; 49193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 49203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (up_info.raised == MagickFalse) 49223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 49233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 49243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(up_info,event.xbutton)) 49253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 49263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ChopPathComponents(working_path,1); 49273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*working_path == '\0') 49283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(working_path,DirectorySeparator, 4929151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 49303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateListState; 49313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy up_info.raised=MagickTrue; 49333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&up_info); 49343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (home_info.raised == MagickFalse) 49363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 49373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 49383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(home_info,event.xbutton)) 49393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 49403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(working_path,home_directory, 4941151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 49423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateListState; 49433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy home_info.raised=MagickTrue; 49453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&home_info); 49463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (special_info.raised == MagickFalse) 49483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 49493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (anomaly == MagickFalse) 49503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 49513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 49523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **formats; 49533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 49543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExceptionInfo 49553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *exception; 49563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 4957bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 49583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_formats; 49593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 49603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 49613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Let user select image format. 49623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 49633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=AcquireExceptionInfo(); 49643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy formats=GetMagickList("*",&number_formats,exception); 49653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception=DestroyExceptionInfo(exception); 49663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,windows->widget.id, 49673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.busy_cursor); 49683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->popup.x=windows->widget.x+60; 49693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->popup.y=windows->widget.y+60; 49703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XListBrowserWidget(display,windows,&windows->popup, 49713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (const char **) formats,"Select","Select image format type:", 49723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy format); 49733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickTrue); 49743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,windows->widget.id, 49753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.cursor); 49763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy LocaleLower(format); 49773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy AppendImageFormat(format,reply_info.text); 49783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.text+Extent(reply_info.text); 49793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 49803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.raised=MagickTrue; 49813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&special_info); 498249e2d862ad0faa61d99d9d252f75913ad3976750cristy for (i=0; i < (ssize_t) number_formats; i++) 49833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy formats[i]=DestroyString(formats[i]); 49843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy formats=(char **) RelinquishMagickMemory(formats); 49853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 49863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 49883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(special_info,event.xbutton)) 49893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 4990151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(working_path,"x:",MagickPathExtent); 49913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 49923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.raised=MagickTrue; 49943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&special_info); 49953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 49963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (action_info.raised == MagickFalse) 49973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 49983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 49993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(action_info,event.xbutton)) 50013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*reply_info.text == '\0') 50033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XBell(display,0); 50043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 50053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 50063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickTrue; 50093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 50103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (cancel_info.raised == MagickFalse) 50123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 50143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(cancel_info,event.xbutton)) 50153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 50173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply='\0'; 50183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 50193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=MagickTrue; 50213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 50223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 50243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ClientMessage: 50263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 50283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy If client window delete message, exit. 50293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 50303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.message_type != windows->wm_protocols) 50313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 50323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l == (int) windows->wm_take_focus) 50333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetInputFocus(display,event.xclient.window,RevertToParent, 50353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (Time) event.xclient.data.l[1]); 50363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 50373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l != (int) windows->wm_delete_window) 50393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 50403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.window == windows->widget.id) 50413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 50433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 50443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 50453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 50473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ConfigureNotify: 50493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 50513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update widget configuration. 50523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 50533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xconfigure.window != windows->widget.id) 50543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 50553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((event.xconfigure.width == (int) windows->widget.width) && 50563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (event.xconfigure.height == (int) windows->widget.height)) 50573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 50583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=(unsigned int) 50593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.width,(int) windows->widget.min_width); 50603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) 50613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.height,(int) windows->widget.min_height); 50623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateConfigurationState; 50633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 50643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case EnterNotify: 50663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 50683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 50693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~InactiveWidgetState); 50703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 50713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case Expose: 50733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.window != windows->widget.id) 50753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 50763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.count != 0) 50773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 50783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawWidgetState; 50793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 50803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 50813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyPress: 50823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 50833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 5084151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy command[MagickPathExtent]; 50853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 50863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static int 50873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 50883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 50893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static KeySym 50903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy key_symbol; 50913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 50923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 50933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to a user key press. 50943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 50953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xkey.window != windows->widget.id) 50963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 50973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=XLookupString((XKeyEvent *) &event.xkey,command, 50983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) sizeof(command),&key_symbol,(XComposeStatus *) NULL); 50993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *(command+length)='\0'; 51003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (AreaIsActive(scroll_info,event.xkey)) 51013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 51033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider. 51043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 51053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch ((int) key_symbol) 51063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Home: 51083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Home: 51093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 51113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 51123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Up: 51143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Up: 51153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id--; 51173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 51183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Down: 51203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Down: 51213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id++; 51233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 51243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Prior: 51263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Prior: 51273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id-=visible_files; 51293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 51303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Next: 51323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Next: 51333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id+=visible_files; 51353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 51363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_End: 51383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_End: 51393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=(int) files; 51413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 51423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 51453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 51463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((key_symbol == XK_Return) || (key_symbol == XK_KP_Enter)) 51483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 51503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Read new directory or glob patterm. 51513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 51523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*reply_info.text == '\0') 51533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 51543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (IsGlob(reply_info.text)) 51553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(glob_pattern,reply_info.text, 5156151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 51573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 51583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(working_path,DirectorySeparator, 5160151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 51613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(working_path,reply_info.text, 5162151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 51633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*working_path == '~') 51643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExpandFilename(working_path); 51653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply='\0'; 51663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateListState; 51683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 51693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (key_symbol == XK_Control_L) 51713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ControlState; 51733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 51743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & ControlState) 51763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch ((int) key_symbol) 51773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_u: 51793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_U: 51803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 51813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 51823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Erase the entire line of text. 51833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 51843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 51853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.text; 51863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.marker=reply_info.text; 51873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 51883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 51893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 51913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 51923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEditText(display,&reply_info,key_symbol,command,state); 51943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 51953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=JumpListState; 51963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 51973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 51983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyRelease: 51993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 52003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 5201151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy command[MagickPathExtent]; 52023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 52033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static KeySym 52043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy key_symbol; 52053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 52063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 52073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to a user key release. 52083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 52093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xkey.window != windows->widget.id) 52103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 52113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XLookupString((XKeyEvent *) &event.xkey,command, 52123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) sizeof(command),&key_symbol,(XComposeStatus *) NULL); 52133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (key_symbol == XK_Control_L) 52143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~ControlState); 52153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 52163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 52173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case LeaveNotify: 52183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 52193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 52203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 52213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=InactiveWidgetState; 52223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 52233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 52243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MapNotify: 52253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 52263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask&=(~CWX); 52273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask&=(~CWY); 52283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 52293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 52303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MotionNotify: 52313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 52323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 52333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Discard pending button motion events. 52343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 52353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckMaskEvent(display,ButtonMotionMask,&event)) ; 52363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.active) 52373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 52383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 52393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider matte. 52403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 52413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=event.xmotion.y- 52423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((slider_info.height+slider_info.bevel_width) >> 1)+1; 52433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y < slider_info.min_y) 52443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 52453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y > slider_info.max_y) 52463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.max_y; 52473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 52483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y != slider_info.min_y) 52493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=(int) ((files*(slider_info.y-slider_info.min_y+1))/ 52503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (slider_info.max_y-slider_info.min_y+1)); 52513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 52523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 52533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 52543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & InactiveWidgetState) 52553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 52563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (up_info.raised == MatteIsActive(up_info,event.xmotion)) 52573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 52583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 52593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Up button status changed. 52603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 52613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy up_info.raised=!up_info.raised; 52623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&up_info); 52633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 52643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 52653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (home_info.raised == MatteIsActive(home_info,event.xmotion)) 52663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 52673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 52683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Home button status changed. 52693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 52703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy home_info.raised=!home_info.raised; 52713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&home_info); 52723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 52733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 52743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (special_info.raised == MatteIsActive(special_info,event.xmotion)) 52753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 52763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 52773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Grab button status changed. 52783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 52793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy special_info.raised=!special_info.raised; 52803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&special_info); 52813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 52823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 52833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (action_info.raised == MatteIsActive(action_info,event.xmotion)) 52843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 52853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 52863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Action button status changed. 52873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 52883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=action_info.raised == MagickFalse ? 52893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 52903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 52913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 52923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 52933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (cancel_info.raised == MatteIsActive(cancel_info,event.xmotion)) 52943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 52953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 52963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Cancel button status changed. 52973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 52983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=cancel_info.raised == MagickFalse ? 52993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 53003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 53013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 53023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 53033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 53043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 53053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionClear: 53063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 53073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 53083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 53093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 53103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 53113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionNotify: 53123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 53133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Atom 53143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy type; 53153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 53163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 53173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy format; 53183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 53193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 53203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *data; 53213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5322f2faecf9facdbbb14fcba373365f9f691a9658e0cristy unsigned long 53233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy after, 53243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 53253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 53263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 53273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Obtain response from primary selection. 53283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 53293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xselection.property == (Atom) None) 53303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 53313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetWindowProperty(display,event.xselection.requestor, 53323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event.xselection.property,0L,2047L,MagickTrue,XA_STRING,&type, 53333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &format,&length,&after,&data); 53343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((status != Success) || (type != XA_STRING) || (format == 32) || 53353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (length == 0)) 53363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 5337151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if ((Extent(reply_info.text)+length) >= (MagickPathExtent-1)) 53383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XBell(display,0); 53393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 53403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 53413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 53423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Insert primary selection in reply text. 53433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 53443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *(data+length)='\0'; 53453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEditText(display,&reply_info,(KeySym) XK_Insert,(char *) data, 53463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state); 53473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 53483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=JumpListState; 53493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawActionState; 53503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 53513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) data); 53523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 53533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 53543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionRequest: 53553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 53563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSelectionEvent 53573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify; 53583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 53593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSelectionRequestEvent 53603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *request; 53613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 53623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reply_info.highlight == MagickFalse) 53633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 53643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 53653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set primary selection. 53663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 53673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy request=(&(event.xselectionrequest)); 53683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XChangeProperty(request->display,request->requestor, 53693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy request->property,request->target,8,PropModeReplace, 53703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned char *) primary_selection,Extent(primary_selection)); 53713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.type=SelectionNotify; 53723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.display=request->display; 53733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.requestor=request->requestor; 53743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.selection=request->selection; 53753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.target=request->target; 53763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.time=request->time; 53773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (request->property == None) 53783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.property=request->target; 53793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 53803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.property=request->property; 53813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSendEvent(request->display,request->requestor,False,0, 53823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (XEvent *) ¬ify); 53833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 53843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 53853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 53863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 53873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } while ((state & ExitState) == 0); 53883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickFalse); 53893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XWithdrawWindow(display,windows->widget.id,windows->widget.screen); 53903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 53913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 53923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Free file list. 53933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5394bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) files; i++) 53953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy filelist[i]=DestroyString(filelist[i]); 53963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (filelist != (char **) NULL) 53973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy filelist=(char **) RelinquishMagickMemory(filelist); 53983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*reply != '\0') 53993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 54003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ConcatenateMagickString(working_path,DirectorySeparator, 5401151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 5402151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) ConcatenateMagickString(working_path,reply,MagickPathExtent); 54033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5404151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(reply,working_path,MagickPathExtent); 54053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*reply == '~') 54063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExpandFilename(reply); 54073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 54083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 54103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 54113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 54123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 54133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 54143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X F o n t B r o w s e r W i d g e t % 54153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 54163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 54173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 54183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 54193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XFontBrowserWidget() displays a Font Browser widget with a font query to the 54213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% user. The user keys a reply and presses the Action or Cancel button to 54223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% exit. The typed text is returned as the reply function parameter. 54233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XFontBrowserWidget method is: 54253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XFontBrowserWidget(Display *display,XWindows *windows, 54273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *action,char *reply) 54283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 54303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 54323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 54333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindows structure. 54353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o action: Specifies a pointer to the action of this widget. 54373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reply: the response from the user is returned in this parameter. 54393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 54413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 54423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 54443ed852eea50f9d4cd633efb8c2b054b8e33c253cristyextern "C" { 54453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 54463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54473ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic int FontCompare(const void *x,const void *y) 54483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 54493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register char 54503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *p, 54513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 54523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p=(char *) *((char **) x); 54543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=(char *) *((char **) y); 54553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while ((*p != '\0') && (*q != '\0') && (*p == *q)) 54563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 54573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy p++; 54583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q++; 54593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 54603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(*p-(*q)); 54613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 54623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 54643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 54653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 54663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5467bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XFontBrowserWidget(Display *display,XWindows *windows, 54683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *action,char *reply) 54693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 54703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define BackButtonText "Back" 54713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define CancelButtonText "Cancel" 54723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define FontnameText "Name:" 54733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define FontPatternText "Pattern:" 54743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define ResetButtonText "Reset" 54753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 5477151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy back_pattern[MagickPathExtent], 54783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **fontlist, 54793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **listhead, 5480151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy primary_selection[MagickPathExtent], 5481151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy reset_pattern[MagickPathExtent], 5482151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy text[MagickPathExtent]; 54833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 54853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fonts, 54863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x, 54873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 54883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 54903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 54913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 5493151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy glob_pattern[MagickPathExtent] = "*"; 54943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static MagickStatusType 54963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask = (MagickStatusType) (CWWidth | CWHeight | CWX | CWY); 54973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 54983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 54993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 55003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 55013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 55023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 55033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width, 55043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visible_fonts, 55053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 55063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5507bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 55083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay, 55093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state; 55103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 55113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEvent 55123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event; 55133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 55143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 55153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info; 55163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 55173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XTextProperty 55183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_name; 55193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 55203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWidgetInfo 55213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info, 55223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy back_info, 55233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info, 55243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info, 55253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info, 55263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mode_info, 55273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info, 55283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info, 55293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reset_info, 55303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info, 55313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info, 55323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info, 55333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info, 55343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info; 55353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 55363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowChanges 55373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes; 55383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 55393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 55403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Get font list and sort in ascending order. 55413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 55423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 55433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 55443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(action != (char *) NULL); 55453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(reply != (char *) NULL); 55463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",action); 55473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickTrue); 55483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 5549151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(back_pattern,glob_pattern,MagickPathExtent); 5550151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(reset_pattern,"*",MagickPathExtent); 55513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fontlist=XListFonts(display,glob_pattern,32767,&fonts); 55523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (fonts == 0) 55533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 55543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 55553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Pattern failed, obtain all the fonts. 55563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 55573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XNoticeWidget(display,windows,"Unable to obtain fonts names:", 55583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy glob_pattern); 5559151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(glob_pattern,"*",MagickPathExtent); 55603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fontlist=XListFonts(display,glob_pattern,32767,&fonts); 55613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (fontlist == (char **) NULL) 55623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 55633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XNoticeWidget(display,windows,"Unable to obtain fonts names:", 55643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy glob_pattern); 55653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 55663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 55673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 55683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 55693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Sort font list in ascending order. 55703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 55713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy listhead=fontlist; 55723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fontlist=(char **) AcquireQuantumMemory((size_t) fonts,sizeof(*fontlist)); 55733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (fontlist == (char **) NULL) 55743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 55753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XNoticeWidget(display,windows,"MemoryAllocationFailed", 55763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnableToViewFonts"); 55773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 55783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 55793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < fonts; i++) 55803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fontlist[i]=listhead[i]; 55813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy qsort((void *) fontlist,(size_t) fonts,sizeof(*fontlist),FontCompare); 55823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 55833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine Font Browser widget attributes. 55843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 55853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=windows->widget.font_info; 55863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width=0; 55873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < fonts; i++) 55883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,fontlist[i]) > text_width) 55893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width=WidgetTextWidth(font_info,fontlist[i]); 55903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,(char *) action); 55913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,CancelButtonText) > width) 55923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,CancelButtonText); 55933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,ResetButtonText) > width) 55943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,ResetButtonText); 55953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,BackButtonText) > width) 55963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,BackButtonText); 55973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width+=QuantumMargin; 55983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,FontPatternText) > width) 55993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,FontPatternText); 56003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,FontnameText) > width) 56013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,FontnameText); 56023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) (font_info->ascent+font_info->descent); 56033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 56043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Position Font Browser widget. 56053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 56063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=width+MagickMin((int) text_width,(int) MaxTextWidth)+ 56073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6*QuantumMargin; 56083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_width=width+MinTextWidth+4*QuantumMargin; 56093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.width < windows->widget.min_width) 56103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=windows->widget.min_width; 56113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) 56123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (((85*height) >> 2)+((13*QuantumMargin) >> 1)+4); 56133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_height=(unsigned int) 56143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (((27*height) >> 1)+((13*QuantumMargin) >> 1)+4); 56153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.height < windows->widget.min_height) 56163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=windows->widget.min_height; 56173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XConstrainWindowPosition(display,&windows->widget); 56183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 56193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Map Font Browser widget. 56203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 56213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(windows->widget.name,"Browse and Select a Font", 5622151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 56233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XStringListToTextProperty(&windows->widget.name,1,&window_name); 56243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 56253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 56263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMName(display,windows->widget.id,&window_name); 56273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMIconName(display,windows->widget.id,&window_name); 56283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) window_name.value); 56293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 56303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.width=(int) windows->widget.width; 56313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.height=(int) windows->widget.height; 56323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.x=windows->widget.x; 56333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.y=windows->widget.y; 56343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XReconfigureWMWindow(display,windows->widget.id, 56353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.screen,mask,&window_changes); 56363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XMapRaised(display,windows->widget.id); 56373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.mapped=MagickFalse; 56383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 56393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to X events. 56403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 56413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&slider_info); 56423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&north_info); 56433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&south_info); 56443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&expose_info); 564501220742d150e5f10a5cdcfd1e7283daddea241bCristy XGetWidgetInfo((char *) NULL,&selection_info); 56463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visible_fonts=0; 56473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime << 2; 56483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state=UpdateConfigurationState; 56493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 56503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 56513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & UpdateConfigurationState) 56523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 56533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 56543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id; 56553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 56563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 56573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize button information. 56583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 56593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(CancelButtonText,&cancel_info); 56603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.width=width; 56613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.height=(unsigned int) ((3*height) >> 1); 56623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.x=(int) 56633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (windows->widget.width-cancel_info.width-QuantumMargin-2); 56643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.y=(int) 56653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (windows->widget.height-cancel_info.height-QuantumMargin); 56663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(action,&action_info); 56673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.width=width; 56683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.height=(unsigned int) ((3*height) >> 1); 56693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.x=cancel_info.x-(cancel_info.width+(QuantumMargin >> 1)+ 56703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (action_info.bevel_width << 1)); 56713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.y=cancel_info.y; 56723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(BackButtonText,&back_info); 56733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy back_info.width=width; 56743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy back_info.height=(unsigned int) ((3*height) >> 1); 56753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy back_info.x=QuantumMargin; 56763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy back_info.y=((5*QuantumMargin) >> 1)+height; 56773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(ResetButtonText,&reset_info); 56783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reset_info.width=width; 56793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reset_info.height=(unsigned int) ((3*height) >> 1); 56803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reset_info.x=QuantumMargin; 56813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reset_info.y=back_info.y+back_info.height+QuantumMargin; 56823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 56833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize reply information. 56843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 56853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(reply,&reply_info); 56863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.raised=MagickFalse; 56873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.bevel_width--; 56883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.width=windows->widget.width-width-((6*QuantumMargin) >> 1); 56893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.height=height << 1; 56903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.x=(int) (width+(QuantumMargin << 1)); 56913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.y=action_info.y-(action_info.height << 1)-QuantumMargin; 56923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 56933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize mode information. 56943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 56953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(reply,&mode_info); 56963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mode_info.bevel_width=0; 56973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mode_info.width=(unsigned int) 56983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (action_info.x-reply_info.x-QuantumMargin); 56993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mode_info.height=action_info.height << 1; 57003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mode_info.x=reply_info.x; 57013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mode_info.y=action_info.y-action_info.height+action_info.bevel_width; 57023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 57033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize scroll information. 57043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 57053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&scroll_info); 57063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.bevel_width--; 57073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.width=height; 57083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.height=(unsigned int) 57093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (reply_info.y-back_info.y-(QuantumMargin >> 1)); 57103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.x=reply_info.x+(reply_info.width-scroll_info.width); 57113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.y=back_info.y-reply_info.bevel_width; 57123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.raised=MagickFalse; 57133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.trough=MagickTrue; 57143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info=scroll_info; 57153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.raised=MagickTrue; 57163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.width-=(north_info.bevel_width << 1); 57173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.height=north_info.width-1; 57183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.x+=north_info.bevel_width; 57193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.y+=north_info.bevel_width; 57203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info=north_info; 57213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.y=scroll_info.y+scroll_info.height-scroll_info.bevel_width- 57223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.height; 57233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=slider_info.id; 57243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info=north_info; 57253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=id; 57263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.width-=2; 57273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.min_y=north_info.y+north_info.height+north_info.bevel_width+ 57283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width+2; 57293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.height=scroll_info.height-((slider_info.min_y- 57303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.y+1) << 1)+4; 57313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visible_fonts=scroll_info.height/(height+(height >> 3)); 57323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (fonts > (int) visible_fonts) 57333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.height=(visible_fonts*slider_info.height)/fonts; 57343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.max_y=south_info.y-south_info.bevel_width- 57353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width-2; 57363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.x=scroll_info.x+slider_info.bevel_width+1; 57373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 57383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info=scroll_info; 57393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y; 57403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 57413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize list information. 57423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 57433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&list_info); 57443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.raised=MagickFalse; 57453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.bevel_width--; 57463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.width=(unsigned int) 57473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (scroll_info.x-reply_info.x-(QuantumMargin >> 1)); 57483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.height=scroll_info.height; 57493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.x=reply_info.x; 57503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.y=scroll_info.y; 57513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.mapped == MagickFalse) 57523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=JumpListState; 57533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 57543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize text information. 57553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 57563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *text='\0'; 57573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(text,&text_info); 57583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.center=MagickFalse; 57593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.width=reply_info.width; 57603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.height=height; 57613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.x=list_info.x-(QuantumMargin >> 1); 57623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.y=QuantumMargin; 57633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 57643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize selection information. 57653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 57663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&selection_info); 57673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.center=MagickFalse; 57683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.width=list_info.width; 57693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.height=(unsigned int) ((9*height) >> 3); 57703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.x=list_info.x; 57713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~UpdateConfigurationState); 57723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 57733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawWidgetState) 57743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 57753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 57763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw Font Browser window. 57773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 57783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=QuantumMargin; 57793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=text_info.y+((text_info.height-height) >> 1)+font_info->ascent; 57803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawString(display,windows->widget.id, 57813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.annotate_context,x,y,FontPatternText, 57823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Extent(FontPatternText)); 5783151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(text_info.text,glob_pattern,MagickPathExtent); 57843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&text_info); 57853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&back_info); 57863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&reset_info); 57873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,&windows->widget,&list_info); 57883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,&windows->widget,&scroll_info); 57893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,&windows->widget,&north_info); 57903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&slider_info); 57913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,&windows->widget,&south_info); 57923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=QuantumMargin; 57933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=reply_info.y+((reply_info.height-height) >> 1)+font_info->ascent; 57943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawString(display,windows->widget.id, 57953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.annotate_context,x,y,FontnameText, 57963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Extent(FontnameText)); 57973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,&windows->widget,&reply_info); 57983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 57993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 58003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 58013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XHighlightWidget(display,&windows->widget,BorderOffset,BorderOffset); 58023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 58033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawActionState; 58043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 58053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawWidgetState); 58063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 58073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & UpdateListState) 58083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 58093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 58103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **checklist; 58113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 58123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 58133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_fonts; 58143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 58153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 58163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update font list. 58173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 58183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy checklist=XListFonts(display,glob_pattern,32767,&number_fonts); 58193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (checklist == (char **) NULL) 58203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 58213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((strchr(glob_pattern,'*') == (char *) NULL) && 58223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (strchr(glob_pattern,'?') == (char *) NULL)) 58233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 58243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 58253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Might be a scaleable font-- exit. 58263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5827151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(reply,glob_pattern,MagickPathExtent); 5828151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(glob_pattern,back_pattern,MagickPathExtent); 58293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickFalse; 58303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 58313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 58323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 5833151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(glob_pattern,back_pattern,MagickPathExtent); 58343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XBell(display,0); 58353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 58363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 58373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (number_fonts == 1) 58383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 58393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 58403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Reply is a single font name-- exit. 58413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 5842151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(reply,checklist[0],MagickPathExtent); 5843151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(glob_pattern,back_pattern,MagickPathExtent); 58443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeFontNames(checklist); 58453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickFalse; 58463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 58473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 58483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 58493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 58503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 58513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeFontNames(listhead); 58523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fontlist=(char **) RelinquishMagickMemory(fontlist); 58533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fontlist=checklist; 58543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fonts=number_fonts; 58553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 58563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 58573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Sort font list in ascending order. 58583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 58593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy listhead=fontlist; 58603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fontlist=(char **) AcquireQuantumMemory((size_t) fonts, 58613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*fontlist)); 58623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (fontlist == (char **) NULL) 58633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 58643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XNoticeWidget(display,windows,"MemoryAllocationFailed", 58653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "UnableToViewFonts"); 58663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 58673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 58683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < fonts; i++) 58693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fontlist[i]=listhead[i]; 58703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy qsort((void *) fontlist,(size_t) fonts,sizeof(*fontlist),FontCompare); 58713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.height= 58723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.height-((slider_info.min_y-scroll_info.y+1) << 1)+1; 58733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (fonts > (int) visible_fonts) 58743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.height=(visible_fonts*slider_info.height)/fonts; 58753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.max_y=south_info.y-south_info.bevel_width- 58763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width-2; 58773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 58783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 58793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y; 58803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 58813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=(~0); 58823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 58833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 58843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw font name & reply. 58853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 58863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 58873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.text; 5888151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(text_info.text,glob_pattern,MagickPathExtent); 58893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&text_info); 58903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 58913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,&windows->widget,&scroll_info); 58923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,&windows->widget,&north_info); 58933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&slider_info); 58943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,&windows->widget,&south_info); 58953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XHighlightWidget(display,&windows->widget,BorderOffset,BorderOffset); 58963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~UpdateListState); 58973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 58983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & JumpListState) 58993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 59003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 59013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Jump scroll to match user font. 59023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 59033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=(~0); 59043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < fonts; i++) 59053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(fontlist[i],reply) >= 0) 59063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 59073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=LocaleCompare(fontlist[i],reply) == 0 ? i : ~0; 59083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 59093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 59103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((i < slider_info.id) || (i >= (int) (slider_info.id+visible_fonts))) 59113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=i-(visible_fonts >> 1); 59123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 59133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 59143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~JumpListState); 59153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 59163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawListState) 59173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 59183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 59193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine slider id and position. 59203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 59213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id >= (int) (fonts-visible_fonts)) 59223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=fonts-visible_fonts; 59233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((slider_info.id < 0) || (fonts <= (int) visible_fonts)) 59243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 59253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 59263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (fonts > 0) 59273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y+= 59283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id*(slider_info.max_y-slider_info.min_y+1)/fonts; 59293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id != selection_info.id) 59303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 59313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 59323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw scroll bar and file names. 59333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 59343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=slider_info.id; 59353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y=list_info.y+(height >> 3)+2; 59363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) visible_fonts; i++) 59373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 59383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.raised=(slider_info.id+i) != list_info.id ? 59393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 59403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=(char *) NULL; 59413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((slider_info.id+i) < fonts) 59423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=fontlist[slider_info.id+i]; 59433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&selection_info); 59443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y+=(int) selection_info.height; 59453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 59463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 59473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update slider. 59483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 59493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y > expose_info.y) 59503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 59513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.height=(unsigned int) slider_info.y-expose_info.y; 59523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y-expose_info.height- 59533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width-1; 59543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 59553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 59563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 59573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.height=(unsigned int) expose_info.y-slider_info.y; 59583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y+slider_info.height+ 59593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width+1; 59603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 59613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,&windows->widget,&north_info); 59623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatte(display,&windows->widget,&expose_info); 59633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&slider_info); 59643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,&windows->widget,&south_info); 59653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y; 59663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 59673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawListState); 59683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 59693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawActionState) 59703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 59713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 59723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *save_info; 59733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 59743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 59753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Display the selected font in a drawing area. 59763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 59773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy save_info=windows->widget.font_info; 59783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=XLoadQueryFont(display,reply_info.text); 59793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (font_info != (XFontStruct *) NULL) 59803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 59813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.font_info=font_info; 59823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetFont(display,windows->widget.widget_context, 59833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info->fid); 59843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 59853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&mode_info); 59863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.font_info=save_info; 59873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (font_info != (XFontStruct *) NULL) 59883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 59893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetFont(display,windows->widget.widget_context, 59903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.font_info->fid); 59913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeFont(display,font_info); 59923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 59933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XHighlightWidget(display,&windows->widget,BorderOffset,BorderOffset); 59943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 59953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawActionState); 59963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 59973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 59983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Wait for next event. 59993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 60003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (north_info.raised && south_info.raised) 60013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XIfEvent(display,&event,XScreenEvent,(char *) windows); 60023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 60033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 60053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Brief delay before advancing scroll bar. 60063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 60073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDelay(display,delay); 60083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime; 60093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckIfEvent(display,&event,XScreenEvent,(char *) windows); 60103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (north_info.raised == MagickFalse) 60113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id > 0) 60123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 60143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider up. 60153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 60163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id--; 60173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 60183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (south_info.raised == MagickFalse) 60203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id < fonts) 60213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 60233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider down. 60243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 60253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id++; 60263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 60273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.type != ButtonRelease) 60293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 60303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (event.type) 60323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonPress: 60343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(slider_info,event.xbutton)) 60363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 60383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Track slider. 60393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 60403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.active=MagickTrue; 60413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 60423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(north_info,event.xbutton)) 60443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id > 0) 60453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 60473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider up. 60483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 60493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.raised=MagickFalse; 60503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id--; 60513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 60523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 60533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(south_info,event.xbutton)) 60553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id < fonts) 60563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 60583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider down. 60593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 60603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.raised=MagickFalse; 60613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id++; 60623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 60633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 60643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(scroll_info,event.xbutton)) 60663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 60683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider. 60693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 60703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.y < slider_info.y) 60713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id-=(visible_fonts-1); 60723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 60733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id+=(visible_fonts-1); 60743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 60753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 60763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 60773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(list_info,event.xbutton)) 60783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 60803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id; 60813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 60823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 60833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed list matte. 60843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 60853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=slider_info.id+(event.xbutton.y-(list_info.y+(height >> 1))+1)/ 60863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.height; 60873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (id >= (int) fonts) 60883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6089151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(reply_info.text,fontlist[id],MagickPathExtent); 60903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 60913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.marker=reply_info.text; 60923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.text+Extent(reply_info.text); 60933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 60943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawActionState; 60953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (id == list_info.id) 60963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 60973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(glob_pattern,reply_info.text, 6098151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 60993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateListState; 61003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 61023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=id; 61033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 61043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(back_info,event.xbutton)) 61073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 61093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Back button. 61103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 61113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy back_info.raised=MagickFalse; 61123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&back_info); 61133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(reset_info,event.xbutton)) 61163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 61183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Reset button. 61193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 61203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reset_info.raised=MagickFalse; 61213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&reset_info); 61223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(action_info,event.xbutton)) 61253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 61273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed action button. 61283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 61293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickFalse; 61303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 61313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(cancel_info,event.xbutton)) 61343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 61363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Cancel button. 61373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 61383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=MagickFalse; 61393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 61403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(reply_info,event.xbutton) == MagickFalse) 61433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.button != Button2) 61453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static Time 61473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy click_time; 61483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 61493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 61503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move text cursor to position of button press. 61513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 61523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=event.xbutton.x-reply_info.x-(QuantumMargin >> 2); 61533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=1; i <= Extent(reply_info.marker); i++) 61543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XTextWidth(font_info,reply_info.marker,i) > x) 61553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.marker+i-1; 61573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.time > (click_time+DoubleClick)) 61583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 61593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 61603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 61623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Become the XA_PRIMARY selection owner. 61633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 61643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(primary_selection,reply_info.text, 6165151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 61663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetSelectionOwner(display,XA_PRIMARY,windows->widget.id, 61673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event.xbutton.time); 61683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=XGetSelectionOwner(display,XA_PRIMARY) == 61693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.id ? MagickTrue : MagickFalse; 61703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 61723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy click_time=event.xbutton.time; 61733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 61763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Request primary selection. 61773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 61783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XConvertSelection(display,XA_PRIMARY,XA_STRING,XA_STRING, 61793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.id,event.xbutton.time); 61803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonRelease: 61833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.mapped == MagickFalse) 61853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 61863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (north_info.raised == MagickFalse) 61873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 61893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User released up button. 61903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 61913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime << 2; 61923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.raised=MagickTrue; 61933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,&windows->widget,&north_info); 61943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 61953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (south_info.raised == MagickFalse) 61963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 61973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 61983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User released down button. 61993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 62003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime << 2; 62013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.raised=MagickTrue; 62023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,&windows->widget,&south_info); 62033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.active) 62053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 62073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Stop tracking slider. 62083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 62093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.active=MagickFalse; 62103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (back_info.raised == MagickFalse) 62133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 62153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(back_info,event.xbutton)) 62163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(glob_pattern,back_pattern, 6218151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 62193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateListState; 62203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy back_info.raised=MagickTrue; 62223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&back_info); 62233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reset_info.raised == MagickFalse) 62253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 62273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(reset_info,event.xbutton)) 62283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 6229151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(back_pattern,glob_pattern,MagickPathExtent); 6230151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(glob_pattern,reset_pattern,MagickPathExtent); 62313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateListState; 62323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reset_info.raised=MagickTrue; 62343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&reset_info); 62353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (action_info.raised == MagickFalse) 62373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 62393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(action_info,event.xbutton)) 62413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*reply_info.text == '\0') 62433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XBell(display,0); 62443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 62453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 62463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickTrue; 62493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 62503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (cancel_info.raised == MagickFalse) 62523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 62543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(cancel_info,event.xbutton)) 62553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 62573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 62583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=MagickTrue; 62603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 62613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ClientMessage: 62653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 62673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy If client window delete message, exit. 62683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 62693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.message_type != windows->wm_protocols) 62703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l == (int) windows->wm_take_focus) 62723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetInputFocus(display,event.xclient.window,RevertToParent, 62743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (Time) event.xclient.data.l[1]); 62753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l != (int) windows->wm_delete_window) 62783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.window == windows->widget.id) 62803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 62823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 62833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 62873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ConfigureNotify: 62883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 62893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 62903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update widget configuration. 62913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 62923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xconfigure.window != windows->widget.id) 62933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((event.xconfigure.width == (int) windows->widget.width) && 62953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (event.xconfigure.height == (int) windows->widget.height)) 62963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 62973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=(unsigned int) 62983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.width,(int) windows->widget.min_width); 62993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) 63003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.height,(int) windows->widget.min_height); 63013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateConfigurationState; 63023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 63033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case EnterNotify: 63053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 63073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 63083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~InactiveWidgetState); 63093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 63103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case Expose: 63123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.window != windows->widget.id) 63143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 63153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.count != 0) 63163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 63173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawWidgetState; 63183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 63193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyPress: 63213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 6323151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy command[MagickPathExtent]; 63243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 63253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static int 63263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 63273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 63283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static KeySym 63293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy key_symbol; 63303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 63313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 63323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to a user key press. 63333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 63343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xkey.window != windows->widget.id) 63353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 63363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=XLookupString((XKeyEvent *) &event.xkey,command, 63373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) sizeof(command),&key_symbol,(XComposeStatus *) NULL); 63383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *(command+length)='\0'; 63393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (AreaIsActive(scroll_info,event.xkey)) 63403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 63423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider. 63433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 63443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch ((int) key_symbol) 63453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Home: 63473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Home: 63483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 63503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 63513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Up: 63533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Up: 63543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id--; 63563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 63573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Down: 63593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Down: 63603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id++; 63623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 63633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Prior: 63653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Prior: 63663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id-=visible_fonts; 63683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 63693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Next: 63713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Next: 63723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id+=visible_fonts; 63743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 63753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_End: 63773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_End: 63783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=fonts; 63803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 63813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 63843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 63853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((key_symbol == XK_Return) || (key_symbol == XK_KP_Enter)) 63873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 63883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 63893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Read new font or glob patterm. 63903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 63913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*reply_info.text == '\0') 63923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6393151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(back_pattern,glob_pattern,MagickPathExtent); 6394151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(glob_pattern,reply_info.text,MagickPathExtent); 63953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateListState; 63963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 63973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 63983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (key_symbol == XK_Control_L) 63993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 64003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ControlState; 64013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 64023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 64033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & ControlState) 64043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch ((int) key_symbol) 64053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 64063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_u: 64073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_U: 64083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 64093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 64103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Erase the entire line of text. 64113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 64123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 64133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.text; 64143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.marker=reply_info.text; 64153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 64163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 64173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 64183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 64193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 64203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 64213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEditText(display,&reply_info,key_symbol,command,state); 64223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 64233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=JumpListState; 64243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 64253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 64263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyRelease: 64273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 64283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 6429151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy command[MagickPathExtent]; 64303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 64313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static KeySym 64323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy key_symbol; 64333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 64343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 64353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to a user key release. 64363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 64373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xkey.window != windows->widget.id) 64383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 64393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XLookupString((XKeyEvent *) &event.xkey,command, 64403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) sizeof(command),&key_symbol,(XComposeStatus *) NULL); 64413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (key_symbol == XK_Control_L) 64423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~ControlState); 64433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 64443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 64453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case LeaveNotify: 64463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 64473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 64483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 64493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=InactiveWidgetState; 64503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 64513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 64523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MapNotify: 64533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 64543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask&=(~CWX); 64553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask&=(~CWY); 64563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 64573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 64583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MotionNotify: 64593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 64603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 64613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Discard pending button motion events. 64623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 64633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckMaskEvent(display,ButtonMotionMask,&event)) ; 64643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.active) 64653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 64663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 64673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider matte. 64683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 64693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=event.xmotion.y- 64703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((slider_info.height+slider_info.bevel_width) >> 1)+1; 64713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y < slider_info.min_y) 64723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 64733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y > slider_info.max_y) 64743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.max_y; 64753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 64763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y != slider_info.min_y) 64773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=(fonts*(slider_info.y-slider_info.min_y+1))/ 64783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (slider_info.max_y-slider_info.min_y+1); 64793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 64803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 64813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 64823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & InactiveWidgetState) 64833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 64843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (back_info.raised == MatteIsActive(back_info,event.xmotion)) 64853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 64863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 64873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Back button status changed. 64883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 64893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy back_info.raised=!back_info.raised; 64903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&back_info); 64913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 64923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 64933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reset_info.raised == MatteIsActive(reset_info,event.xmotion)) 64943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 64953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 64963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Reset button status changed. 64973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 64983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reset_info.raised=!reset_info.raised; 64993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&reset_info); 65003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 65013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 65023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (action_info.raised == MatteIsActive(action_info,event.xmotion)) 65033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 65043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 65053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Action button status changed. 65063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 65073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=action_info.raised == MagickFalse ? 65083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 65093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&action_info); 65103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 65113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 65123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (cancel_info.raised == MatteIsActive(cancel_info,event.xmotion)) 65133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 65143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 65153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Cancel button status changed. 65163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 65173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=cancel_info.raised == MagickFalse ? 65183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 65193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 65203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 65213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 65223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 65233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 65243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionClear: 65253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 65263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 65273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 65283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 65293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 65303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionNotify: 65313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 65323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Atom 65333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy type; 65343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 65353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 65363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy format; 65373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 65383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 65393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *data; 65403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6541f2faecf9facdbbb14fcba373365f9f691a9658e0cristy unsigned long 65423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy after, 65433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 65443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 65453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 65463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Obtain response from primary selection. 65473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 65483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xselection.property == (Atom) None) 65493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 65503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetWindowProperty(display,event.xselection.requestor, 65513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event.xselection.property,0L,2047L,MagickTrue,XA_STRING,&type, 65523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &format,&length,&after,&data); 65533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((status != Success) || (type != XA_STRING) || (format == 32) || 65543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (length == 0)) 65553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 6556151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if ((Extent(reply_info.text)+length) >= (MagickPathExtent-1)) 65573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XBell(display,0); 65583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 65593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 65603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 65613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Insert primary selection in reply text. 65623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 65633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *(data+length)='\0'; 65643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEditText(display,&reply_info,(KeySym) XK_Insert,(char *) data, 65653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state); 65663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,&windows->widget,&reply_info); 65673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=JumpListState; 65683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawActionState; 65693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 65703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) data); 65713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 65723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 65733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionRequest: 65743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 65753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSelectionEvent 65763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify; 65773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 65783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSelectionRequestEvent 65793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *request; 65803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 65813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 65823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set XA_PRIMARY selection. 65833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 65843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy request=(&(event.xselectionrequest)); 65853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XChangeProperty(request->display,request->requestor, 65863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy request->property,request->target,8,PropModeReplace, 65873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned char *) primary_selection,Extent(primary_selection)); 65883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.type=SelectionNotify; 65893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.display=request->display; 65903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.requestor=request->requestor; 65913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.selection=request->selection; 65923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.target=request->target; 65933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.time=request->time; 65943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (request->property == None) 65953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.property=request->target; 65963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 65973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.property=request->property; 65983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSendEvent(request->display,request->requestor,False,0, 65993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (XEvent *) ¬ify); 66003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 66013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 66023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 66033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 66043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } while ((state & ExitState) == 0); 66053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickFalse); 66063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XWithdrawWindow(display,windows->widget.id,windows->widget.screen); 66073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 66083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 66093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Free font list. 66103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 66113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeFontNames(listhead); 66123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fontlist=(char **) RelinquishMagickMemory(fontlist); 66133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 66143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 66153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 66163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 66173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 66183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 66193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 66203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X I n f o W i d g e t % 66213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 66223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 66233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 66243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 66253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 66263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XInfoWidget() displays text in the Info widget. The purpose is to inform 66273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the user that what activity is currently being performed (e.g. reading 66283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% an image, rotating an image, etc.). 66293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 66303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XInfoWidget method is: 66313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 66323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XInfoWidget(Display *display,XWindows *windows,const char *activity) 66333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 66343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 66353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 66363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 66373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 66383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 66393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindows structure. 66403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 66413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o activity: This character string reflects the current activity and is 66423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% displayed in the Info widget. 66433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 66443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 6645bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XInfoWidget(Display *display,XWindows *windows, 66463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *activity) 66473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 66483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 66493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 66503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy margin, 66513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 66523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 66533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 66543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info; 66553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 66563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowChanges 66573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes; 66583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 66593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 66603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Map Info widget. 66613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 66623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 66633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 66643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 66653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(activity != (char *) NULL); 66663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=windows->info.font_info; 66673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,(char *) activity)+((3*QuantumMargin) >> 1)+4; 66683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) (((6*(font_info->ascent+font_info->descent)) >> 2)+4); 66693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((windows->info.width != width) || (windows->info.height != height)) 66703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 66713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 66723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Size Info widget to accommodate the activity text. 66733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 66743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->info.width=width; 66753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->info.height=height; 66763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.width=(int) width; 66773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.height=(int) height; 66783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XReconfigureWMWindow(display,windows->info.id,windows->info.screen, 66793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) (CWWidth | CWHeight),&window_changes); 66803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 66813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->info.mapped == MagickFalse) 66823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 66833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XMapRaised(display,windows->info.id); 66843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->info.mapped=MagickTrue; 66853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 66863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 66873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize Info matte information. 66883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 66893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) (font_info->ascent+font_info->descent); 66903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(activity,&monitor_info); 66913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy monitor_info.bevel_width--; 66923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy margin=monitor_info.bevel_width+((windows->info.height-height) >> 1)-2; 66933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy monitor_info.center=MagickFalse; 66943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy monitor_info.x=(int) margin; 66953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy monitor_info.y=(int) margin; 66963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy monitor_info.width=windows->info.width-(margin << 1); 66973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy monitor_info.height=windows->info.height-(margin << 1)+1; 66983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 66993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw Info widget. 67003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 67013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy monitor_info.raised=MagickFalse; 67023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,&windows->info,&monitor_info); 67033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy monitor_info.raised=MagickTrue; 67043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->info,&monitor_info); 67053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 67063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 67073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 67083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 67093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 67103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 67113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 67123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X L i s t B r o w s e r W i d g e t % 67133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 67143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 67153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 67163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 67173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 67183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XListBrowserWidget() displays a List Browser widget with a query to the 67193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% user. The user keys a reply or select a reply from the list. Finally, the 67203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% user presses the Action or Cancel button to exit. The typed text is 67213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% returned as the reply function parameter. 67223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 67233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XListBrowserWidget method is: 67243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 67253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XListBrowserWidget(Display *display,XWindows *windows, 67263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XWindowInfo *window_info,const char **list,const char *action, 67273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *query,char *reply) 67283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 67293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 67303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 67313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 67323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 67333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 67343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindows structure. 67353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 67363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o list: Specifies a pointer to an array of strings. The user can 67373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% select from these strings as a possible reply value. 67383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 67393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o action: Specifies a pointer to the action of this widget. 67403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 67413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o query: Specifies a pointer to the query to present to the user. 67423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 67433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reply: the response from the user is returned in this parameter. 67443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 67453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 6746bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XListBrowserWidget(Display *display,XWindows *windows, 67473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowInfo *window_info,const char **list,const char *action, 67483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *query,char *reply) 67493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 67503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define CancelButtonText "Cancel" 67513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 67523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 6753151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy primary_selection[MagickPathExtent]; 67543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 67553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 67563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 67573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 67583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 67593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 67603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 67613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static MagickStatusType 67623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask = (MagickStatusType) (CWWidth | CWHeight | CWX | CWY); 67633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 67643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 67653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 67663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 67673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 67683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entries, 67693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 67703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width, 67713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visible_entries, 67723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 67733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 6774bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 67753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay, 67763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state; 67773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 67783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEvent 67793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event; 67803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 67813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 67823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info; 67833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 67843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XTextProperty 67853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_name; 67863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 67873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWidgetInfo 67883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info, 67893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info, 67903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info, 67913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info, 67923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info, 67933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info, 67943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info, 67953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info, 67963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info, 67973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info, 67983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info; 67993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 68003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowChanges 68013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes; 68023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 68033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 68043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Count the number of entries in the list. 68053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 68063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 68073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 68083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(window_info != (XWindowInfo *) NULL); 68093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(list != (const char **) NULL); 68103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(action != (char *) NULL); 68113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(query != (char *) NULL); 68123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(reply != (char *) NULL); 68133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",action); 68143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickTrue); 68153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 68163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (list == (const char **) NULL) 68173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XNoticeWidget(display,windows,"No text to browse:",(char *) NULL); 68193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 68203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 68213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (entries=0; ; entries++) 68223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (list[entries] == (char *) NULL) 68233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 68243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 68253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine Font Browser widget attributes. 68263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 68273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=window_info->font_info; 68283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width=WidgetTextWidth(font_info,(char *) query); 68293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) entries; i++) 68303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,(char *) list[i]) > text_width) 68313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width=WidgetTextWidth(font_info,(char *) list[i]); 68323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,(char *) action); 68333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,CancelButtonText) > width) 68343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,CancelButtonText); 68353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width+=QuantumMargin; 68363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) (font_info->ascent+font_info->descent); 68373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 68383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Position List Browser widget. 68393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 68403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->width=(unsigned int) MagickMin((int) text_width,(int) 68413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MaxTextWidth)+((9*QuantumMargin) >> 1); 68423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->min_width=(unsigned int) (MinTextWidth+4*QuantumMargin); 68433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->width < window_info->min_width) 68443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->width=window_info->min_width; 68453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->height=(unsigned int) 68463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (((81*height) >> 2)+((13*QuantumMargin) >> 1)+4); 68473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->min_height=(unsigned int) 68483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (((23*height) >> 1)+((13*QuantumMargin) >> 1)+4); 68493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->height < window_info->min_height) 68503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->height=window_info->min_height; 68513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XConstrainWindowPosition(display,window_info); 68523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 68533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Map List Browser widget. 68543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 6855151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(window_info->name,"Browse",MagickPathExtent); 68563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XStringListToTextProperty(&window_info->name,1,&window_name); 68573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 68583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMName(display,window_info->id,&window_name); 68603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMIconName(display,windows->widget.id,&window_name); 68613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) window_name.value); 68623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 68633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.width=(int) window_info->width; 68643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.height=(int) window_info->height; 68653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.x=window_info->x; 68663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.y=window_info->y; 68673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XReconfigureWMWindow(display,window_info->id,window_info->screen,mask, 68683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &window_changes); 68693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XMapRaised(display,window_info->id); 68703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->mapped=MagickFalse; 68713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 68723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to X events. 68733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 68743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&slider_info); 68753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&north_info); 68763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&south_info); 68773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&expose_info); 6878ca0aa658e700b82fdcfc65c359301fd089271911cristy XGetWidgetInfo((char *) NULL,&selection_info); 68793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visible_entries=0; 68803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime << 2; 68813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state=UpdateConfigurationState; 68823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 68833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & UpdateConfigurationState) 68853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 68863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 68873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id; 68883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 68893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 68903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize button information. 68913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 68923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(CancelButtonText,&cancel_info); 68933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.width=width; 68943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.height=(unsigned int) ((3*height) >> 1); 68953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.x=(int) 68963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (window_info->width-cancel_info.width-QuantumMargin-2); 68973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.y=(int) 68983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (window_info->height-cancel_info.height-QuantumMargin); 68993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(action,&action_info); 69003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.width=width; 69013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.height=(unsigned int) ((3*height) >> 1); 69023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.x=cancel_info.x-(cancel_info.width+(QuantumMargin >> 1)+ 69033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (action_info.bevel_width << 1)); 69043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.y=cancel_info.y; 69053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 69063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize reply information. 69073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 69083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(reply,&reply_info); 69093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.raised=MagickFalse; 69103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.bevel_width--; 69113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.width=window_info->width-((4*QuantumMargin) >> 1); 69123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.height=height << 1; 69133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.x=QuantumMargin; 69143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.y=action_info.y-reply_info.height-QuantumMargin; 69153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 69163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize scroll information. 69173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 69183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&scroll_info); 69193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.bevel_width--; 69203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.width=height; 69213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.height=(unsigned int) 69223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (reply_info.y-((6*QuantumMargin) >> 1)-height); 69233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.x=reply_info.x+(reply_info.width-scroll_info.width); 69243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.y=((5*QuantumMargin) >> 1)+height-reply_info.bevel_width; 69253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.raised=MagickFalse; 69263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.trough=MagickTrue; 69273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info=scroll_info; 69283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.raised=MagickTrue; 69293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.width-=(north_info.bevel_width << 1); 69303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.height=north_info.width-1; 69313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.x+=north_info.bevel_width; 69323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.y+=north_info.bevel_width; 69333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info=north_info; 69343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.y=scroll_info.y+scroll_info.height-scroll_info.bevel_width- 69353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.height; 69363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=slider_info.id; 69373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info=north_info; 69383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=id; 69393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.width-=2; 69403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.min_y=north_info.y+north_info.height+north_info.bevel_width+ 69413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width+2; 69423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.height=scroll_info.height-((slider_info.min_y- 69433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.y+1) << 1)+4; 69443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visible_entries=scroll_info.height/(height+(height >> 3)); 69453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (entries > visible_entries) 69463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.height=(visible_entries*slider_info.height)/entries; 69473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.max_y=south_info.y-south_info.bevel_width- 69483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width-2; 69493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.x=scroll_info.x+slider_info.bevel_width+1; 69503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 69513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info=scroll_info; 69523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y; 69533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 69543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize list information. 69553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 69563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&list_info); 69573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.raised=MagickFalse; 69583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.bevel_width--; 69593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.width=(unsigned int) 69603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (scroll_info.x-reply_info.x-(QuantumMargin >> 1)); 69613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.height=scroll_info.height; 69623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.x=reply_info.x; 69633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.y=scroll_info.y; 69643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->mapped == MagickFalse) 69653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) entries; i++) 69663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (LocaleCompare(list[i],reply) == 0) 69673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 69683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=i; 69693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=i-(visible_entries >> 1); 69703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id < 0) 69713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 69723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 69733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 69743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize text information. 69753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 69763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(query,&text_info); 69773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.width=reply_info.width; 69783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.height=height; 69793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.x=list_info.x-(QuantumMargin >> 1); 69803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info.y=QuantumMargin; 69813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 69823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize selection information. 69833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 69843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&selection_info); 69853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.center=MagickFalse; 69863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.width=list_info.width; 69873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.height=(unsigned int) ((9*height) >> 3); 69883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.x=list_info.x; 69893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~UpdateConfigurationState); 69903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 69913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawWidgetState) 69923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 69933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 69943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw List Browser window. 69953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 69963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,window_info,&text_info); 69973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,window_info,&list_info); 69983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,window_info,&scroll_info); 69993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,window_info,&north_info); 70003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,window_info,&slider_info); 70013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,window_info,&south_info); 70023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,window_info,&reply_info); 70033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,window_info,&reply_info); 70043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,window_info,&action_info); 70053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,window_info,&cancel_info); 70063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XHighlightWidget(display,window_info,BorderOffset,BorderOffset); 70073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 70083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawActionState; 70093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 70103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawWidgetState); 70113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawListState) 70133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 70143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 70153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine slider id and position. 70163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 70173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id >= (int) (entries-visible_entries)) 70183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=(int) (entries-visible_entries); 70193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((slider_info.id < 0) || (entries <= visible_entries)) 70203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 70213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 70223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (entries > 0) 70233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y+= 70243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id*(slider_info.max_y-slider_info.min_y+1)/entries; 70253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id != selection_info.id) 70263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 70273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 70283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw scroll bar and file names. 70293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 70303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=slider_info.id; 70313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y=list_info.y+(height >> 3)+2; 70323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) visible_entries; i++) 70333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 70343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.raised=(slider_info.id+i) != list_info.id ? 70353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 70363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=(char *) NULL; 70373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((slider_info.id+i) < (int) entries) 70383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=(char *) list[slider_info.id+i]; 70393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,window_info,&selection_info); 70403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y+=(int) selection_info.height; 70413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 70433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update slider. 70443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 70453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y > expose_info.y) 70463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 70473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.height=(unsigned int) slider_info.y-expose_info.y; 70483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y-expose_info.height- 70493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width-1; 70503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 70523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 70533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.height=(unsigned int) expose_info.y-slider_info.y; 70543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y+slider_info.height+ 70553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width+1; 70563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,window_info,&north_info); 70583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatte(display,window_info,&expose_info); 70593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,window_info,&slider_info); 70603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,window_info,&south_info); 70613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y; 70623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawListState); 70643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 70663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Wait for next event. 70673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 70683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (north_info.raised && south_info.raised) 70693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XIfEvent(display,&event,XScreenEvent,(char *) windows); 70703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 70713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 70723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 70733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Brief delay before advancing scroll bar. 70743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 70753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDelay(display,delay); 70763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime; 70773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckIfEvent(display,&event,XScreenEvent,(char *) windows); 70783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (north_info.raised == MagickFalse) 70793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id > 0) 70803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 70813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 70823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider up. 70833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 70843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id--; 70853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 70863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (south_info.raised == MagickFalse) 70883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id < (int) entries) 70893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 70903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 70913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider down. 70923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 70933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id++; 70943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 70953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.type != ButtonRelease) 70973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 70983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 70993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (event.type) 71003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 71013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonPress: 71023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 71033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(slider_info,event.xbutton)) 71043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 71053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 71063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Track slider. 71073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 71083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.active=MagickTrue; 71093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 71103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 71113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(north_info,event.xbutton)) 71123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id > 0) 71133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 71143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 71153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider up. 71163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 71173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.raised=MagickFalse; 71183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id--; 71193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 71203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 71213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 71223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(south_info,event.xbutton)) 71233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id < (int) entries) 71243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 71253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 71263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider down. 71273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 71283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.raised=MagickFalse; 71293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id++; 71303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 71313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 71323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 71333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(scroll_info,event.xbutton)) 71343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 71353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 71363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider. 71373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 71383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.y < slider_info.y) 71393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id-=(visible_entries-1); 71403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 71413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id+=(visible_entries-1); 71423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 71433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 71443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 71453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(list_info,event.xbutton)) 71463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 71473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 71483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id; 71493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 71503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 71513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed list matte. 71523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 71533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=slider_info.id+(event.xbutton.y-(list_info.y+(height >> 1))+1)/ 71543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.height; 71553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (id >= (int) entries) 71563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 7157151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(reply_info.text,list[id],MagickPathExtent); 71583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 71593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.marker=reply_info.text; 71603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.text+Extent(reply_info.text); 71613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,window_info,&reply_info); 71623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 71633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (id == list_info.id) 71643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 71653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickFalse; 71663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,window_info,&action_info); 71673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 71683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 71693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=id; 71703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 71713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 71723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 71733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(action_info,event.xbutton)) 71743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 71753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 71763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed action button. 71773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 71783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickFalse; 71793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,window_info,&action_info); 71803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 71813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 71823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(cancel_info,event.xbutton)) 71833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 71843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 71853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Cancel button. 71863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 71873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=MagickFalse; 71883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,window_info,&cancel_info); 71893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 71903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 71913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(reply_info,event.xbutton) == MagickFalse) 71923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 71933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.button != Button2) 71943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 71953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static Time 71963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy click_time; 71973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 71983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 71993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move text cursor to position of button press. 72003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 72013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=event.xbutton.x-reply_info.x-(QuantumMargin >> 2); 72023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=1; i <= Extent(reply_info.marker); i++) 72033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XTextWidth(font_info,reply_info.marker,i) > x) 72043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 72053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.marker+i-1; 72063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.time > (click_time+DoubleClick)) 72073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 72083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 72093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 72113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Become the XA_PRIMARY selection owner. 72123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 72133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(primary_selection,reply_info.text, 7214151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 72153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetSelectionOwner(display,XA_PRIMARY,window_info->id, 72163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event.xbutton.time); 72173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=XGetSelectionOwner(display,XA_PRIMARY) == 72183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->id ? MagickTrue : MagickFalse; 72193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,window_info,&reply_info); 72213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy click_time=event.xbutton.time; 72223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 72233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 72253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Request primary selection. 72263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 72273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XConvertSelection(display,XA_PRIMARY,XA_STRING,XA_STRING, 72283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->id,event.xbutton.time); 72293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 72303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonRelease: 72323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (window_info->mapped == MagickFalse) 72343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 72353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (north_info.raised == MagickFalse) 72363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 72383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User released up button. 72393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 72403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime << 2; 72413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.raised=MagickTrue; 72423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,window_info,&north_info); 72433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (south_info.raised == MagickFalse) 72453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 72473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User released down button. 72483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 72493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime << 2; 72503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.raised=MagickTrue; 72513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,window_info,&south_info); 72523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.active) 72543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 72563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Stop tracking slider. 72573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 72583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.active=MagickFalse; 72593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 72603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (action_info.raised == MagickFalse) 72623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == window_info->id) 72643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(action_info,event.xbutton)) 72663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*reply_info.text == '\0') 72683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XBell(display,0); 72693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 72703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 72713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickTrue; 72743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,window_info,&action_info); 72753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (cancel_info.raised == MagickFalse) 72773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == window_info->id) 72793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(cancel_info,event.xbutton)) 72803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 72823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 72833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=MagickTrue; 72853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,window_info,&cancel_info); 72863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(reply_info,event.xbutton) == MagickFalse) 72883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 72893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 72903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 72913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ClientMessage: 72923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 72933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 72943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy If client window delete message, exit. 72953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 72963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.message_type != windows->wm_protocols) 72973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 72983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l == (int) windows->wm_take_focus) 72993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetInputFocus(display,event.xclient.window,RevertToParent, 73013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (Time) event.xclient.data.l[1]); 73023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l != (int) windows->wm_delete_window) 73053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.window == window_info->id) 73073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 73093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 73103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ConfigureNotify: 73153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 73173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update widget configuration. 73183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 73193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xconfigure.window != window_info->id) 73203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((event.xconfigure.width == (int) window_info->width) && 73223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (event.xconfigure.height == (int) window_info->height)) 73233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->width=(unsigned int) 73253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.width,(int) window_info->min_width); 73263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_info->height=(unsigned int) 73273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.height,(int) window_info->min_height); 73283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateConfigurationState; 73293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case EnterNotify: 73323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != window_info->id) 73343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~InactiveWidgetState); 73363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case Expose: 73393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.window != window_info->id) 73413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.count != 0) 73433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawWidgetState; 73453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyPress: 73483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 7350151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy command[MagickPathExtent]; 73513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 73523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static int 73533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 73543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 73553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static KeySym 73563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy key_symbol; 73573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 73583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 73593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to a user key press. 73603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 73613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xkey.window != window_info->id) 73623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=XLookupString((XKeyEvent *) &event.xkey,command, 73643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) sizeof(command),&key_symbol,(XComposeStatus *) NULL); 73653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *(command+length)='\0'; 73663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (AreaIsActive(scroll_info,event.xkey)) 73673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 73693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider. 73703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 73713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch ((int) key_symbol) 73723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Home: 73743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Home: 73753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 73773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Up: 73803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Up: 73813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id--; 73833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Down: 73863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Down: 73873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id++; 73893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Prior: 73923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Prior: 73933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 73943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id-=visible_entries; 73953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 73963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 73973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Next: 73983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Next: 73993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id+=visible_entries; 74013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 74023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_End: 74043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_End: 74053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=(int) entries; 74073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 74083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 74113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 74123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((key_symbol == XK_Return) || (key_symbol == XK_KP_Enter)) 74143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 74163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Read new entry. 74173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 74183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*reply_info.text == '\0') 74193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 74203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=MagickFalse; 74213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,window_info,&action_info); 74223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 74233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 74243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (key_symbol == XK_Control_L) 74263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ControlState; 74283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 74293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & ControlState) 74313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch ((int) key_symbol) 74323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_u: 74343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_U: 74353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 74373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Erase the entire line of text. 74383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 74393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *reply_info.text='\0'; 74403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.cursor=reply_info.text; 74413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.marker=reply_info.text; 74423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 74433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 74443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 74463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 74473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEditText(display,&reply_info,key_symbol,command,state); 74493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,window_info,&reply_info); 74503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 74513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyRelease: 74533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 7455151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy command[MagickPathExtent]; 74563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 74573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static KeySym 74583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy key_symbol; 74593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 74603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 74613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to a user key release. 74623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 74633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xkey.window != window_info->id) 74643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 74653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XLookupString((XKeyEvent *) &event.xkey,command, 74663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) sizeof(command),&key_symbol,(XComposeStatus *) NULL); 74673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (key_symbol == XK_Control_L) 74683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~ControlState); 74693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 74703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case LeaveNotify: 74723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != window_info->id) 74743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 74753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=InactiveWidgetState; 74763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 74773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MapNotify: 74793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask&=(~CWX); 74813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask&=(~CWY); 74823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 74833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 74843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MotionNotify: 74853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 74873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Discard pending button motion events. 74883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 74893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckMaskEvent(display,ButtonMotionMask,&event)) ; 74903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.active) 74913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 74923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 74933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider matte. 74943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 74953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=event.xmotion.y- 74963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((slider_info.height+slider_info.bevel_width) >> 1)+1; 74973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y < slider_info.min_y) 74983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 74993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y > slider_info.max_y) 75003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.max_y; 75013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 75023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y != slider_info.min_y) 75033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=(int) ((entries*(slider_info.y- 75043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.min_y+1))/(slider_info.max_y-slider_info.min_y+1)); 75053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 75063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 75073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 75083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & InactiveWidgetState) 75093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 75103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (action_info.raised == MatteIsActive(action_info,event.xmotion)) 75113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 75123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 75133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Action button status changed. 75143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 75153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy action_info.raised=action_info.raised == MagickFalse ? 75163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 75173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,window_info,&action_info); 75183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 75193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 75203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (cancel_info.raised == MatteIsActive(cancel_info,event.xmotion)) 75213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 75223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 75233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Cancel button status changed. 75243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 75253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=cancel_info.raised == MagickFalse ? 75263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue : MagickFalse; 75273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,window_info,&cancel_info); 75283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 75293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 75303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 75313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 75323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionClear: 75333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 75343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy reply_info.highlight=MagickFalse; 75353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,window_info,&reply_info); 75363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 75373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 75383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionNotify: 75393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 75403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Atom 75413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy type; 75423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 75433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 75443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy format; 75453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 75463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned char 75473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *data; 75483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7549f2faecf9facdbbb14fcba373365f9f691a9658e0cristy unsigned long 75503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy after, 75513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 75523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 75533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 75543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Obtain response from primary selection. 75553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 75563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xselection.property == (Atom) None) 75573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 75583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XGetWindowProperty(display, 75593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event.xselection.requestor,event.xselection.property,0L,2047L, 75603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickTrue,XA_STRING,&type,&format,&length,&after,&data); 75613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((status != Success) || (type != XA_STRING) || (format == 32) || 75623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (length == 0)) 75633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 7564151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if ((Extent(reply_info.text)+length) >= (MagickPathExtent-1)) 75653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XBell(display,0); 75663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 75673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 75683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 75693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Insert primary selection in reply text. 75703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 75713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *(data+length)='\0'; 75723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEditText(display,&reply_info,(KeySym) XK_Insert,(char *) data, 75733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state); 75743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatteText(display,window_info,&reply_info); 75753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawActionState; 75763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 75773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) data); 75783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 75793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 75803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionRequest: 75813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 75823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSelectionEvent 75833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify; 75843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 75853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSelectionRequestEvent 75863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *request; 75873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 75883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (reply_info.highlight == MagickFalse) 75893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 75903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 75913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set primary selection. 75923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 75933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy request=(&(event.xselectionrequest)); 75943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XChangeProperty(request->display,request->requestor, 75953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy request->property,request->target,8,PropModeReplace, 75963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned char *) primary_selection,Extent(primary_selection)); 75973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.type=SelectionNotify; 75983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.send_event=MagickTrue; 75993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.display=request->display; 76003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.requestor=request->requestor; 76013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.selection=request->selection; 76023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.target=request->target; 76033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.time=request->time; 76043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (request->property == None) 76053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.property=request->target; 76063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 76073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.property=request->property; 76083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSendEvent(request->display,request->requestor,False,NoEventMask, 76093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (XEvent *) ¬ify); 76103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 76113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 76123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 76133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 76143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } while ((state & ExitState) == 0); 76153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickFalse); 76163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XWithdrawWindow(display,window_info->id,window_info->screen); 76173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 76183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 76193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 76203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 76213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 76223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 76233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 76243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 76253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X M e n u W i d g e t % 76263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 76273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 76283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 76293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 76303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XMenuWidget() maps a menu and returns the command pointed to by the user 76323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% when the button is released. 76333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XMenuWidget method is: 76353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% int XMenuWidget(Display *display,XWindows *windows,const char *title, 76373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char **selections,char *item) 76383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 76403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o selection_number: Specifies the number of the selection that the 76423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% user choose. 76433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 76453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 76463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindows structure. 76483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o title: Specifies a character string that describes the menu selections. 76503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o selections: Specifies a pointer to one or more strings that comprise 76523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the choices in the menu. 76533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o item: Specifies a character array. The item selected from the menu 76553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% is returned here. 76563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 76573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 7658bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate int XMenuWidget(Display *display,XWindows *windows, 76593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *title,const char **selections,char *item) 76603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 76613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Cursor 76623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cursor; 76633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 76643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 76653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id, 76663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x, 76673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 76683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 76693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 76703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 76713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_selections, 76723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy title_height, 76733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy top_offset, 76743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 76753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 7676bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 76773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state; 76783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 76793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEvent 76803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event; 76813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 76823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 76833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info; 76843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 76853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWindowAttributes 76863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_attributes; 76873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 76883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWidgetInfo 76893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy highlight_info, 76903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy menu_info, 76913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info; 76923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 76933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowChanges 76943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes; 76953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 76963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 76973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine Menu widget attributes. 76983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 76993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 77003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 77013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(title != (char *) NULL); 77023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(selections != (const char **) NULL); 77033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(item != (char *) NULL); 77043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",title); 77053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=windows->widget.font_info; 77063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=submenu_info.active == 0 ? 77073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy WidgetTextWidth(font_info,(char *) title) : 0; 77083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (id=0; selections[id] != (char *) NULL; id++) 77093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 77103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,(char *) selections[id]); 77113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (width > windows->widget.width) 77123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=width; 77133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 77143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_selections=(unsigned int) id; 77153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&menu_info); 77163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy title_height=(unsigned int) (submenu_info.active == 0 ? 77173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (3*(font_info->descent+font_info->ascent) >> 1)+5 : 2); 77183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,(char *) title); 77193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) ((3*(font_info->ascent+font_info->descent)) >> 1); 77203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 77213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Position Menu widget. 77223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 77233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width+=QuantumMargin+(menu_info.bevel_width << 1); 77243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy top_offset=title_height+menu_info.bevel_width-1; 77253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=top_offset+number_selections*height+4; 77263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_width=windows->widget.width; 77273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_height=windows->widget.height; 77283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XQueryPosition(display,windows->widget.root,&x,&y); 77293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.x=x-(QuantumMargin >> 1); 77303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (submenu_info.active != 0) 77313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 77323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.x= 77333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->command.x+windows->command.width-QuantumMargin; 77343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy toggle_info.raised=MagickTrue; 77353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleEast(display,&windows->command,&toggle_info); 77363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 773749e2d862ad0faa61d99d9d252f75913ad3976750cristy windows->widget.y=submenu_info.active == 0 ? y-(int) 77383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((3*title_height) >> 2) : y; 77393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (submenu_info.active != 0) 77403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.y=windows->command.y+submenu_info.y; 77413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XConstrainWindowPosition(display,&windows->widget); 77423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 77433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Map Menu widget. 77443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 77453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_attributes.override_redirect=MagickTrue; 77463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XChangeWindowAttributes(display,windows->widget.id, 7747bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy (size_t) CWOverrideRedirect,&window_attributes); 77483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.width=(int) windows->widget.width; 77493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.height=(int) windows->widget.height; 77503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.x=windows->widget.x; 77513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.y=windows->widget.y; 77523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XReconfigureWMWindow(display,windows->widget.id,windows->widget.screen, 77533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) (CWWidth | CWHeight | CWX | CWY),&window_changes); 77543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XMapRaised(display,windows->widget.id); 77553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.mapped=MagickFalse; 77563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 77573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to X events. 77583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 77593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.height=height; 77603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cursor=XCreateFontCursor(display,XC_right_ptr); 77613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,windows->image.id,cursor); 77623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,windows->command.id,cursor); 77633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckDefineCursor(display,windows->widget.id,cursor); 77643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state=UpdateConfigurationState; 77653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 77663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 77673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & UpdateConfigurationState) 77683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 77693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 77703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize selection information. 77713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 77723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&menu_info); 77733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy menu_info.bevel_width--; 77743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy menu_info.width=windows->widget.width-((menu_info.bevel_width) << 1); 77753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy menu_info.height=windows->widget.height-((menu_info.bevel_width) << 1); 77763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy menu_info.x=(int) menu_info.bevel_width; 77773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy menu_info.y=(int) menu_info.bevel_width; 77783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&selection_info); 77793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.center=MagickFalse; 77803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.width=menu_info.width; 77813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.height=height; 77823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.x=menu_info.x; 77833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy highlight_info=selection_info; 77843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy highlight_info.bevel_width--; 77853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy highlight_info.width-=(highlight_info.bevel_width << 1); 77863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy highlight_info.height-=(highlight_info.bevel_width << 1); 77873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy highlight_info.x+=highlight_info.bevel_width; 77883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~UpdateConfigurationState); 77893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 77903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawWidgetState) 77913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 77923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 77933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw Menu widget. 77943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 77953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (submenu_info.active == 0) 77963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 77973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=(int) title_height; 77983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetBevelColor(display,&windows->widget,MagickFalse); 77993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawLine(display,windows->widget.id, 78003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.widget_context,selection_info.x,y-1, 78013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) selection_info.width,y-1); 78023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetBevelColor(display,&windows->widget,MagickTrue); 78033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawLine(display,windows->widget.id, 78043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.widget_context,selection_info.x,y, 78053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) selection_info.width,y); 78063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetFillStyle(display,windows->widget.widget_context, 78073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy FillSolid); 78083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 78093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 78103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw menu selections. 78113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 78123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.center=MagickTrue; 78133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y=(int) menu_info.bevel_width; 78143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=(char *) title; 78153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (submenu_info.active == 0) 78163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&selection_info); 78173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.center=MagickFalse; 78183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y=(int) top_offset; 78193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (id=0; id < (int) number_selections; id++) 78203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 78213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=(char *) selections[id]; 78223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&selection_info); 78233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy highlight_info.y=selection_info.y+highlight_info.bevel_width; 78243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (id == selection_info.id) 78253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBevel(display,&windows->widget,&highlight_info); 78263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y+=(int) selection_info.height; 78273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 78283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBevel(display,&windows->widget,&menu_info); 78293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawWidgetState); 78303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 78313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (number_selections > 2) 78323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 78333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 78343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw Menu line. 78353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 78363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=(int) (top_offset+selection_info.height*(number_selections-1)); 78373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetBevelColor(display,&windows->widget,MagickFalse); 78383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawLine(display,windows->widget.id, 78393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.widget_context,selection_info.x,y-1, 78403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) selection_info.width,y-1); 78413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetBevelColor(display,&windows->widget,MagickTrue); 78423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawLine(display,windows->widget.id, 78433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.widget_context,selection_info.x,y, 78443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) selection_info.width,y); 78453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetFillStyle(display,windows->widget.widget_context,FillSolid); 78463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 78473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 78483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Wait for next event. 78493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 78503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XIfEvent(display,&event,XScreenEvent,(char *) windows); 78513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (event.type) 78523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 78533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonPress: 78543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 78553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window != windows->widget.id) 78563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 78573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 78583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exit menu. 78593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 78603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->command.id) 78613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XPutBackEvent(display,&event); 78623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 78633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *item='\0'; 78643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 78653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 78663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 78673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~InactiveWidgetState); 78683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=(event.xbutton.y-top_offset)/(int) selection_info.height; 78693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=id; 78703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((id < 0) || (id >= (int) number_selections)) 78713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 78723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 78733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Highlight this selection. 78743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 78753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y=(int) (top_offset+id*selection_info.height); 78763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=(char *) selections[id]; 78773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&selection_info); 78783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy highlight_info.y=selection_info.y+highlight_info.bevel_width; 78793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBevel(display,&windows->widget,&highlight_info); 78803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 78813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 78823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonRelease: 78833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 78843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.mapped == MagickFalse) 78853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 78863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->command.id) 78873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((state & InactiveWidgetState) == 0) 78883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 78893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 78903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exit menu. 78913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 78923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickFalse); 78933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *item='\0'; 78943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 78953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 78963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 78973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ConfigureNotify: 78983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 78993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 79003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update widget configuration. 79013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 79023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xconfigure.window != windows->widget.id) 79033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 79043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((event.xconfigure.width == (int) windows->widget.width) && 79053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (event.xconfigure.height == (int) windows->widget.height)) 79063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 79073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=(unsigned int) 79083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.width,(int) windows->widget.min_width); 79093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) 79103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.height,(int) windows->widget.min_height); 79113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateConfigurationState; 79123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 79133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 79143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case EnterNotify: 79153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 79163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 79173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 79183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.state == 0) 79193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 79203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~InactiveWidgetState); 79213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=((event.xcrossing.y-top_offset)/(int) selection_info.height); 79223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((selection_info.id >= 0) && 79233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (selection_info.id < (int) number_selections)) 79243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 79253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 79263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Unhighlight last selection. 79273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 79283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (id == selection_info.id) 79293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 79303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y=(int) 79313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (top_offset+selection_info.id*selection_info.height); 79323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=(char *) selections[selection_info.id]; 79333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&selection_info); 79343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 79353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((id < 0) || (id >= (int) number_selections)) 79363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 79373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 79383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Highlight this selection. 79393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 79403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=id; 79413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y=(int) 79423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (top_offset+selection_info.id*selection_info.height); 79433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=(char *) selections[selection_info.id]; 79443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&selection_info); 79453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy highlight_info.y=selection_info.y+highlight_info.bevel_width; 79463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBevel(display,&windows->widget,&highlight_info); 79473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 79483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 79493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case Expose: 79503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 79513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.window != windows->widget.id) 79523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 79533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.count != 0) 79543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 79553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawWidgetState; 79563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 79573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 79583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case LeaveNotify: 79593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 79603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 79613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 79623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=InactiveWidgetState; 79633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=selection_info.id; 79643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((id < 0) || (id >= (int) number_selections)) 79653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 79663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 79673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Unhighlight last selection. 79683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 79693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y=(int) (top_offset+id*selection_info.height); 79703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 79713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=(char *) selections[id]; 79723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&selection_info); 79733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 79743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 79753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MotionNotify: 79763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 79773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 79783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Discard pending button motion events. 79793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 79803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckMaskEvent(display,ButtonMotionMask,&event)) ; 79813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (submenu_info.active != 0) 79823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xmotion.window == windows->command.id) 79833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 79843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((state & InactiveWidgetState) == 0) 79853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 79863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(submenu_info,event.xmotion) == MagickFalse) 79873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 79883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 79893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *item='\0'; 79903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 79913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 79923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 79933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 79943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 79953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WindowIsActive(windows->command,event.xmotion)) 79963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 79973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 79983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *item='\0'; 79993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 80003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 80013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 80023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 80033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xmotion.window != windows->widget.id) 80043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 80053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & InactiveWidgetState) 80063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 80073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=(event.xmotion.y-top_offset)/(int) selection_info.height; 80083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((selection_info.id >= 0) && 80093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (selection_info.id < (int) number_selections)) 80103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 80113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 80123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Unhighlight last selection. 80133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 80143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (id == selection_info.id) 80153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 80163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y=(int) 80173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (top_offset+selection_info.id*selection_info.height); 80183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=(char *) selections[selection_info.id]; 80193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&selection_info); 80203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 80213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=id; 80223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((id < 0) || (id >= (int) number_selections)) 80233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 80243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 80253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Highlight this selection. 80263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 80273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y=(int) (top_offset+id*selection_info.height); 80283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=(char *) selections[id]; 80293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&selection_info); 80303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy highlight_info.y=selection_info.y+highlight_info.bevel_width; 80313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBevel(display,&windows->widget,&highlight_info); 80323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 80333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 80343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 80353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 80363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 80373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } while ((state & ExitState) == 0); 80383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeCursor(display,cursor); 80393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_attributes.override_redirect=MagickFalse; 80403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XChangeWindowAttributes(display,windows->widget.id, 8041bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy (size_t) CWOverrideRedirect,&window_attributes); 80423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XWithdrawWindow(display,windows->widget.id,windows->widget.screen); 80433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 80443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (submenu_info.active != 0) 80453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 80463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy submenu_info.active=MagickFalse; 80473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy toggle_info.raised=MagickFalse; 80483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleEast(display,&windows->command,&toggle_info); 80493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 80503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((selection_info.id < 0) || (selection_info.id >= (int) number_selections)) 80513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(~0); 8052151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(item,selections[selection_info.id],MagickPathExtent); 80533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(selection_info.id); 80543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 80553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 80563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 80573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 80583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 80593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 80603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 80613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X N o t i c e W i d g e t % 80623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 80633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 80643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 80653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 80663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 80673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XNoticeWidget() displays a Notice widget with a notice to the user. The 80683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% function returns when the user presses the "Dismiss" button. 80693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 80703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XNoticeWidget method is: 80713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 80723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XNoticeWidget(Display *display,XWindows *windows, 80733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *reason,const char *description) 80743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 80753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 80763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 80773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 80783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 80793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 80803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindows structure. 80813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 80823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o reason: Specifies the message to display before terminating the 80833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% program. 80843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 80853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o description: Specifies any description to the message. 80863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 80873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8088bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XNoticeWidget(Display *display,XWindows *windows, 80893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *reason,const char *description) 80903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 80913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define DismissButtonText "Dismiss" 80923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define Timeout 8 80933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 80943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char 80953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *text; 80963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 80973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 80983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x, 80993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 81003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 81013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 81023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 81033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 81043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy time_t 81053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy timer; 81063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 81073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 81083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 81093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 81103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8111bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 81123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state; 81133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 81143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEvent 81153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event; 81163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 81173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 81183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info; 81193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 81203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XTextProperty 81213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_name; 81223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 81233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWidgetInfo 81243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info; 81253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 81263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowChanges 81273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes; 81283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 81293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 81303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine Notice widget attributes. 81313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 81323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 81333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 81343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(reason != (char *) NULL); 81353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",reason); 81363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDelay(display,SuspendTime << 3); /* avoid surpise with delay */ 81373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickTrue); 81383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 81393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=windows->widget.font_info; 81403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,DismissButtonText); 81413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text=GetLocaleExceptionMessage(XServerError,reason); 81423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text != (char *) NULL) 81433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,(char *) text) > width) 81443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,(char *) text); 81453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (description != (char *) NULL) 81463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 81473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text=GetLocaleExceptionMessage(XServerError,description); 81483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text != (char *) NULL) 81493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,(char *) text) > width) 81503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,(char *) text); 81513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 81523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) (font_info->ascent+font_info->descent); 81533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 81543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Position Notice widget. 81553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 81563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=width+4*QuantumMargin; 81573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_width=width+QuantumMargin; 81583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.width < windows->widget.min_width) 81593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=windows->widget.min_width; 81603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) (12*height); 81613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_height=(unsigned int) (7*height); 81623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.height < windows->widget.min_height) 81633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=windows->widget.min_height; 81643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XConstrainWindowPosition(display,&windows->widget); 81653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 81663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Map Notice widget. 81673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 8168151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(windows->widget.name,"Notice",MagickPathExtent); 81693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XStringListToTextProperty(&windows->widget.name,1,&window_name); 81703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 81713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 81723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMName(display,windows->widget.id,&window_name); 81733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMIconName(display,windows->widget.id,&window_name); 81743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) window_name.value); 81753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 81763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.width=(int) windows->widget.width; 81773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.height=(int) windows->widget.height; 81783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.x=windows->widget.x; 81793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.y=windows->widget.y; 81803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XReconfigureWMWindow(display,windows->widget.id,windows->widget.screen, 81813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) (CWWidth | CWHeight | CWX | CWY),&window_changes); 81823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XMapRaised(display,windows->widget.id); 81833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.mapped=MagickFalse; 81843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XBell(display,0); 81853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 81863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to X events. 81873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 81883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy timer=time((time_t *) NULL)+Timeout; 81893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state=UpdateConfigurationState; 81903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 81913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 81923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (time((time_t *) NULL) > timer) 81933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 81943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & UpdateConfigurationState) 81953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 81963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 81973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize Dismiss button information. 81983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 81993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(DismissButtonText,&dismiss_info); 82003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.width=(unsigned int) QuantumMargin+ 82013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy WidgetTextWidth(font_info,DismissButtonText); 82023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.height=(unsigned int) ((3*height) >> 1); 82033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.x=(int) 82043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((windows->widget.width >> 1)-(dismiss_info.width >> 1)); 82053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.y=(int) 82063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (windows->widget.height-(dismiss_info.height << 1)); 82073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~UpdateConfigurationState); 82083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawWidgetState) 82103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 82123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw Notice widget. 82133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 82143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,(char *) reason); 82153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=(int) ((windows->widget.width >> 1)-(width >> 1)); 82163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=(int) ((windows->widget.height >> 1)-(height << 1)); 82173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawString(display,windows->widget.id, 82183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.annotate_context,x,y,(char *) reason,Extent(reason)); 82193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (description != (char *) NULL) 82203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,(char *) description); 82223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=(int) ((windows->widget.width >> 1)-(width >> 1)); 82233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y+=height; 82243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XDrawString(display,windows->widget.id, 82253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.annotate_context,x,y,(char *) description, 82263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Extent(description)); 82273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&dismiss_info); 82293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XHighlightWidget(display,&windows->widget,BorderOffset,BorderOffset); 82303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawWidgetState); 82313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 82333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Wait for next event. 82343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 82353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XCheckIfEvent(display,&event,XScreenEvent,(char *) windows) == MagickFalse) 82363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 82383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Do not block if delay > 0. 82393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 82403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDelay(display,SuspendTime << 2); 82413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 82423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (event.type) 82443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonPress: 82463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(dismiss_info,event.xbutton)) 82483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 82503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Dismiss button. 82513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 82523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.raised=MagickFalse; 82533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&dismiss_info); 82543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 82553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 82573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonRelease: 82593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.mapped == MagickFalse) 82613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 82623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (dismiss_info.raised == MagickFalse) 82633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 82653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(dismiss_info,event.xbutton)) 82663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 82673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.raised=MagickTrue; 82683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&dismiss_info); 82693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 82713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ClientMessage: 82733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 82753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy If client window delete message, exit. 82763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 82773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.message_type != windows->wm_protocols) 82783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 82793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l == (int) windows->wm_take_focus) 82803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetInputFocus(display,event.xclient.window,RevertToParent, 82823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (Time) event.xclient.data.l[1]); 82833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 82843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l != (int) windows->wm_delete_window) 82863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 82873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.window == windows->widget.id) 82883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 82903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 82913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 82933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 82943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ConfigureNotify: 82953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 82963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 82973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update widget configuration. 82983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 82993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xconfigure.window != windows->widget.id) 83003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((event.xconfigure.width == (int) windows->widget.width) && 83023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (event.xconfigure.height == (int) windows->widget.height)) 83033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=(unsigned int) 83053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.width,(int) windows->widget.min_width); 83063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) 83073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.height,(int) windows->widget.min_height); 83083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateConfigurationState; 83093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 83113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case EnterNotify: 83123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 83133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 83143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~InactiveWidgetState); 83163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 83183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case Expose: 83193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 83203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.window != windows->widget.id) 83213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.count != 0) 83233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawWidgetState; 83253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 83273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyPress: 83283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 83293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 8330151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy command[MagickPathExtent]; 83313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 83323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static KeySym 83333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy key_symbol; 83343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 83353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 83363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to a user key press. 83373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 83383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xkey.window != windows->widget.id) 83393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XLookupString((XKeyEvent *) &event.xkey,command, 83413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) sizeof(command),&key_symbol,(XComposeStatus *) NULL); 83423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((key_symbol == XK_Return) || (key_symbol == XK_KP_Enter)) 83433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 83443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.raised=MagickFalse; 83453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&dismiss_info); 83463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 83473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 83493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 83513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case LeaveNotify: 83523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 83533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 83543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=InactiveWidgetState; 83563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 83583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MotionNotify: 83593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 83603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 83613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Discard pending button motion events. 83623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 83633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckMaskEvent(display,ButtonMotionMask,&event)) ; 83643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & InactiveWidgetState) 83653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (dismiss_info.raised == MatteIsActive(dismiss_info,event.xmotion)) 83673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 83683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 83693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Dismiss button status changed. 83703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 83713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.raised= 83723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.raised == MagickFalse ? MagickTrue : MagickFalse; 83733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&dismiss_info); 83743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 83763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 83783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 83793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 83803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 83813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } while ((state & ExitState) == 0); 83823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickFalse); 83833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XWithdrawWindow(display,windows->widget.id,windows->widget.screen); 83843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 83853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 83863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 83873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 83883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 83893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 83903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 83913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 83923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X P r e f e r e n c e s W i d g e t % 83933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 83943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 83953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 83963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 83973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 83983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XPreferencesWidget() displays a Preferences widget with program preferences. 83993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% If the user presses the Apply button, the preferences are stored in a 84003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% configuration file in the users' home directory. 84013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 84023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XPreferencesWidget method is: 84033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 84043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickBooleanType XPreferencesWidget(Display *display, 84053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XResourceInfo *resource_info,XWindows *windows) 84063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 84073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 84083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 84093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 84103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 84113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 84123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 84133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 84143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindows structure. 84153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 84163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8417bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate MagickBooleanType XPreferencesWidget(Display *display, 84183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XResourceInfo *resource_info,XWindows *windows) 84193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 84203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define ApplyButtonText "Apply" 84213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define CacheButtonText "%lu mega-bytes of memory in the undo edit cache " 84223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define CancelButtonText "Cancel" 84233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define NumberPreferences 8 84243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static const char 84263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *Preferences[] = 84273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 84283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "display image centered on a backdrop", 84293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "confirm on program exit", 84303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "confirm on image edits", 84313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "correct image for display gamma", 84323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "display warning messages", 84333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "apply Floyd/Steinberg error diffusion to image", 84343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "use a shared colormap for colormapped X visuals", 84353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "display images as an X server pixmap" 84363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy }; 84373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 8439151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy cache[MagickPathExtent]; 84403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 84423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x, 84433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y; 84443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 84463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 84473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 84493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 84503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 84523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 84533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width, 84543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 84553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8456bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 84573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state; 84583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEvent 84603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event; 84613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 84633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info; 84643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XTextProperty 84663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_name; 84673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWidgetInfo 84693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy apply_info, 84703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cache_info, 84713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info, 84723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[NumberPreferences]; 84733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowChanges 84753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes; 84763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 84773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 84783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine Preferences widget attributes. 84793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 84803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); 84813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 84823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(resource_info != (XResourceInfo *) NULL); 84833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 84843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 84853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=windows->widget.font_info; 84863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width=WidgetTextWidth(font_info,CacheButtonText); 84873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < NumberPreferences; i++) 84883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,(char *) Preferences[i]) > text_width) 84893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width=WidgetTextWidth(font_info,(char *) Preferences[i]); 84903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,ApplyButtonText); 84913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(font_info,CancelButtonText) > width) 84923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,CancelButtonText); 84933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width+=(unsigned int) QuantumMargin; 84943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) (font_info->ascent+font_info->descent); 84953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 84963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Position Preferences widget. 84973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 84983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=(unsigned int) (MagickMax((int) (width << 1), 84993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) text_width)+6*QuantumMargin); 85003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_width=(width << 1)+QuantumMargin; 85013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.width < windows->widget.min_width) 85023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=windows->widget.min_width; 85033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) 85043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (7*height+NumberPreferences*(height+(QuantumMargin >> 1))); 85053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_height=(unsigned int) 85063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (7*height+NumberPreferences*(height+(QuantumMargin >> 1))); 85073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.height < windows->widget.min_height) 85083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=windows->widget.min_height; 85093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XConstrainWindowPosition(display,&windows->widget); 85103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 85113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Map Preferences widget. 85123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 8513151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(windows->widget.name,"Preferences",MagickPathExtent); 85143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XStringListToTextProperty(&windows->widget.name,1,&window_name); 85153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 85163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 85173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMName(display,windows->widget.id,&window_name); 85183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMIconName(display,windows->widget.id,&window_name); 85193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) window_name.value); 85203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 85213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.width=(int) windows->widget.width; 85223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.height=(int) windows->widget.height; 85233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.x=windows->widget.x; 85243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.y=windows->widget.y; 85253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XReconfigureWMWindow(display,windows->widget.id,windows->widget.screen, 85263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned int) (CWWidth | CWHeight | CWX | CWY),&window_changes); 85273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XMapRaised(display,windows->widget.id); 85283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.mapped=MagickFalse; 85293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 85303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to X events. 85313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 85323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state=UpdateConfigurationState; 85333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickTrue); 85343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 85353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 85363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & UpdateConfigurationState) 85373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 85383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 85393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize button information. 85403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 85413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(CancelButtonText,&cancel_info); 85423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.width=width; 85433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.height=(unsigned int) (3*height) >> 1; 85443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.x=(int) windows->widget.width-cancel_info.width- 85453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (QuantumMargin << 1); 85463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.y=(int) windows->widget.height- 85473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.height-QuantumMargin; 85483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(ApplyButtonText,&apply_info); 85493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy apply_info.width=width; 85503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy apply_info.height=(unsigned int) (3*height) >> 1; 85513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy apply_info.x=QuantumMargin << 1; 85523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy apply_info.y=cancel_info.y; 85533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=(int) (height << 1); 85543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < NumberPreferences; i++) 85553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 85563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(Preferences[i],&preferences_info[i]); 85573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[i].bevel_width--; 85583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[i].width=(unsigned int) QuantumMargin >> 1; 85593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[i].height=(unsigned int) QuantumMargin >> 1; 85603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[i].x=QuantumMargin << 1; 85613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[i].y=y; 85623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y+=height+(QuantumMargin >> 1); 85633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 85643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[0].raised=resource_info->backdrop == 85653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickFalse ? MagickTrue : MagickFalse; 85663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[1].raised=resource_info->confirm_exit == 85673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickFalse ? MagickTrue : MagickFalse; 85683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[2].raised=resource_info->confirm_edit == 85693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickFalse ? MagickTrue : MagickFalse; 85703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[3].raised=resource_info->gamma_correct == 85713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickFalse ? MagickTrue : MagickFalse; 85723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[4].raised=resource_info->display_warnings == 85733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickFalse ? MagickTrue : MagickFalse; 8574cbda611068350bf4459f2dda1951f8823702e129cristy preferences_info[5].raised= 8575cbda611068350bf4459f2dda1951f8823702e129cristy resource_info->quantize_info->dither_method == NoDitherMethod ? 8576cbda611068350bf4459f2dda1951f8823702e129cristy MagickTrue : MagickFalse; 85773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[6].raised=resource_info->colormap != 85783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SharedColormap ? MagickTrue : MagickFalse; 85793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[7].raised=resource_info->use_pixmap == 85803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickFalse ? MagickTrue : MagickFalse; 8581151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(cache,MagickPathExtent,CacheButtonText, 8582f2faecf9facdbbb14fcba373365f9f691a9658e0cristy (unsigned long) resource_info->undo_cache); 85833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(cache,&cache_info); 85843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cache_info.bevel_width--; 85853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cache_info.width=(unsigned int) QuantumMargin >> 1; 85863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cache_info.height=(unsigned int) QuantumMargin >> 1; 85873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cache_info.x=QuantumMargin << 1; 85883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cache_info.y=y; 85893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~UpdateConfigurationState); 85903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 85913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawWidgetState) 85923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 85933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 85943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw Preferences widget. 85953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 85963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&apply_info); 85973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 85983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < NumberPreferences; i++) 85993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&preferences_info[i]); 86003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleEast(display,&windows->widget,&cache_info); 86013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XHighlightWidget(display,&windows->widget,BorderOffset,BorderOffset); 86023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawWidgetState); 86033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 86043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 86053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Wait for next event. 86063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 86073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XIfEvent(display,&event,XScreenEvent,(char *) windows); 86083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (event.type) 86093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 86103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonPress: 86113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 86123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(apply_info,event.xbutton)) 86133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 86143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 86153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Apply button. 86163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 86173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy apply_info.raised=MagickFalse; 86183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&apply_info); 86193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 86203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 86213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(cancel_info,event.xbutton)) 86223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 86233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 86243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Cancel button. 86253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 86263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=MagickFalse; 86273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 86283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 86293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 86303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < NumberPreferences; i++) 86313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(preferences_info[i],event.xbutton)) 86323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 86333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 86343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed a Preferences button. 86353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 86363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[i].raised=preferences_info[i].raised == 86373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickFalse ? MagickTrue : MagickFalse; 86383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&preferences_info[i]); 86393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 86403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 86413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(cache_info,event.xbutton)) 86423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 86433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 86443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Cache button. 86453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 86463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x=cache_info.x+cache_info.width+cache_info.bevel_width+ 86473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (QuantumMargin >> 1); 86483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy y=cache_info.y+((cache_info.height-height) >> 1); 86493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,cache); 86503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XClearArea(display,windows->widget.id,x,y,width,height, 86513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy False); 86523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->undo_cache<<=1; 86533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (resource_info->undo_cache > 256) 86543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->undo_cache=1; 8655151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(cache,MagickPathExtent,CacheButtonText, 8656f2faecf9facdbbb14fcba373365f9f691a9658e0cristy (unsigned long) resource_info->undo_cache); 86573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cache_info.raised=MagickFalse; 86583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleEast(display,&windows->widget,&cache_info); 86593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 86603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 86613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 86623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 86633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonRelease: 86643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 86653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.mapped == MagickFalse) 86663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 86673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (apply_info.raised == MagickFalse) 86683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 86693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 86703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(apply_info,event.xbutton)) 86713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 86723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy apply_info.raised=MagickTrue; 86733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&apply_info); 86743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy apply_info.raised=MagickFalse; 86753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 86763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (cancel_info.raised == MagickFalse) 86773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 86783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 86793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(cancel_info,event.xbutton)) 86803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 86813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised=MagickTrue; 86823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 86833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 86843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (cache_info.raised == MagickFalse) 86853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 86863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cache_info.raised=MagickTrue; 86873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleEast(display,&windows->widget,&cache_info); 86883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 86893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 86903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 86913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ClientMessage: 86923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 86933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 86943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy If client window delete message, exit. 86953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 86963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.message_type != windows->wm_protocols) 86973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 86983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l == (int) windows->wm_take_focus) 86993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 87003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetInputFocus(display,event.xclient.window,RevertToParent, 87013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (Time) event.xclient.data.l[1]); 87023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 87043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l != (int) windows->wm_delete_window) 87053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.window == windows->widget.id) 87073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 87083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 87093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 87113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 87133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ConfigureNotify: 87143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 87153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 87163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update widget configuration. 87173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 87183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xconfigure.window != windows->widget.id) 87193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((event.xconfigure.width == (int) windows->widget.width) && 87213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (event.xconfigure.height == (int) windows->widget.height)) 87223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=(unsigned int) 87243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.width,(int) windows->widget.min_width); 87253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) 87263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.height,(int) windows->widget.min_height); 87273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateConfigurationState; 87283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 87303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case EnterNotify: 87313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 87323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 87333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~InactiveWidgetState); 87353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 87373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case Expose: 87383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 87393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.window != windows->widget.id) 87403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.count != 0) 87423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawWidgetState; 87443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 87463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyPress: 87473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 87483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 8749151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy command[MagickPathExtent]; 87503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 87513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static KeySym 87523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy key_symbol; 87533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 87543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 87553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to a user key press. 87563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 87573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xkey.window != windows->widget.id) 87583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XLookupString((XKeyEvent *) &event.xkey,command, 87603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) sizeof(command),&key_symbol,(XComposeStatus *) NULL); 87613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((key_symbol == XK_Return) || (key_symbol == XK_KP_Enter)) 87623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 87633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy apply_info.raised=MagickFalse; 87643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&apply_info); 87653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 87663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 87683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 87703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case LeaveNotify: 87713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 87723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 87733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=InactiveWidgetState; 87753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 87773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MotionNotify: 87783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 87793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 87803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Discard pending button motion events. 87813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 87823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckMaskEvent(display,ButtonMotionMask,&event)) ; 87833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & InactiveWidgetState) 87843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (apply_info.raised == MatteIsActive(apply_info,event.xmotion)) 87863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 87873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 87883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Apply button status changed. 87893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 87903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy apply_info.raised= 87913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy apply_info.raised == MagickFalse ? MagickTrue : MagickFalse; 87923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&apply_info); 87933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 87943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 87953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (cancel_info.raised == MatteIsActive(cancel_info,event.xmotion)) 87963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 87973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 87983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Cancel button status changed. 87993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 88003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised= 88013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy cancel_info.raised == MagickFalse ? MagickTrue : MagickFalse; 88023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&cancel_info); 88033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 88043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 88053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 88063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 88073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 88083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 88093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 88103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } while ((state & ExitState) == 0); 88113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickFalse); 88123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XWithdrawWindow(display,windows->widget.id,windows->widget.screen); 88133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 88143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (apply_info.raised) 88153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickFalse); 88163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 88173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Save user preferences to the client configuration file. 88183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 88193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->backdrop= 88203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[0].raised == MagickFalse ? MagickTrue : MagickFalse; 88213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->confirm_exit= 88223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[1].raised == MagickFalse ? MagickTrue : MagickFalse; 88233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->confirm_edit= 88243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[2].raised == MagickFalse ? MagickTrue : MagickFalse; 88253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->gamma_correct= 88263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[3].raised == MagickFalse ? MagickTrue : MagickFalse; 88273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->display_warnings= 88283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[4].raised == MagickFalse ? MagickTrue : MagickFalse; 8829cbda611068350bf4459f2dda1951f8823702e129cristy resource_info->quantize_info->dither_method= 8830cbda611068350bf4459f2dda1951f8823702e129cristy preferences_info[5].raised == MagickFalse ? 8831cbda611068350bf4459f2dda1951f8823702e129cristy RiemersmaDitherMethod : NoDitherMethod; 88323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->colormap=SharedColormap; 88333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (preferences_info[6].raised) 88343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->colormap=PrivateColormap; 88353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy resource_info->use_pixmap= 88363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy preferences_info[7].raised == MagickFalse ? MagickTrue : MagickFalse; 88373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XUserPreferences(resource_info); 88383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 88393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 88403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 88413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 88423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 88433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 88443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 88453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 88463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X P r o g r e s s M o n i t o r W i d g e t % 88473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 88483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 88493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 88503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 88513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XProgressMonitorWidget() displays the progress a task is making in 88533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% completing a task. A span of zero toggles the active status. An inactive 88543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% state disables the progress monitor. 88553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XProgressMonitorWidget method is: 88573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XProgressMonitorWidget(Display *display,XWindows *windows, 88593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char *task,const MagickOffsetType offset, 88603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const MagickSizeType span) 88613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 88633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 88653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 88663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindows structure. 88683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o task: Identifies the task in progress. 88703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o offset: Specifies the offset position within the span which represents 88723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% how much progress has been made in completing a task. 88733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o span: Specifies the span relative to completing a task. 88753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 88763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8877bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XProgressMonitorWidget(Display *display,XWindows *windows, 88783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const char *task,const MagickOffsetType offset,const MagickSizeType span) 88793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 88803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 88813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 88823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 88833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEvent 88843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event; 88853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 88863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 88873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 88883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(task != (const char *) NULL); 88893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",task); 88903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (span == 0) 88913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 88923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 88933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update image windows if there is a pending expose event. 88943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 88953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckTypedWindowEvent(display,windows->command.id,Expose,&event)) 88963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCommandWidget(display,windows,(const char **) NULL,&event); 88973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckTypedWindowEvent(display,windows->image.id,Expose,&event)) 88983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XRefreshWindow(display,&windows->image,&event); 88993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckTypedWindowEvent(display,windows->info.id,Expose,&event)) 89003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (monitor_info.text != (char *) NULL) 89013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XInfoWidget(display,windows,monitor_info.text); 89023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 89033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Draw progress monitor bar to represent percent completion of a task. 89043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 89053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((windows->info.mapped == MagickFalse) || (task != monitor_info.text)) 89063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XInfoWidget(display,windows,task); 89073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=(unsigned int) (((offset+1)*(windows->info.width- 89083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (2*monitor_info.x)))/span); 89093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (width < monitor_info.width) 89103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 89113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy monitor_info.raised=MagickTrue; 89123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->info,&monitor_info); 89133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy monitor_info.raised=MagickFalse; 89143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 89153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy monitor_info.width=width; 89163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->info,&monitor_info); 89173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFlush(display); 89183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 89193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 89203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 89213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 89223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 89233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 89243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 89253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% X T e x t V i e w W i d g e t % 89263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 89273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 89283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 89293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 89303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 89313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XTextViewWidget() displays text in a Text View widget. 89323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 89333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the XTextViewWidget method is: 89343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 89353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% void XTextViewWidget(Display *display,const XResourceInfo *resource_info, 89363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XWindows *windows,const MagickBooleanType mono,const char *title, 89373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% const char **textlist) 89383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 89393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 89403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 89413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o display: Specifies a connection to an X server; returned from 89423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% XOpenDisplay. 89433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 89443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o resource_info: Specifies a pointer to a X11 XResourceInfo structure. 89453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 89463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o window: Specifies a pointer to a XWindows structure. 89473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 89483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o mono: Use mono-spaced font when displaying text. 89493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 89503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o title: This character string is displayed at the top of the widget 89513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% window. 89523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 89533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o textlist: This string list is displayed within the Text View widget. 89543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 89553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 8956bcbda3fd7d9f3084869f5cebabceb0324c3b2cd7cristyMagickPrivate void XTextViewWidget(Display *display, 89573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const XResourceInfo *resource_info,XWindows *windows, 89583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy const MagickBooleanType mono,const char *title,const char **textlist) 89593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 89603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define DismissButtonText "Dismiss" 89613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 89623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy char 8963151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy primary_selection[MagickPathExtent]; 89643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 89653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy register int 89663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 89673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 89683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static MagickStatusType 89693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask = (MagickStatusType) (CWWidth | CWHeight | CWX | CWY); 89703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 89713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Status 89723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 89733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 89743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy unsigned int 89753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height, 89763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy lines, 89773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width, 89783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visible_lines, 89793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width; 89803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 8981bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 89823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay, 89833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state; 89843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 89853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XEvent 89863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event; 89873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 89883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XFontStruct 89893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *font_info, 89903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *text_info; 89913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 89923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XTextProperty 89933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_name; 89943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 89953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWidgetInfo 89963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info, 89973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info, 89983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info, 89993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info, 90003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info, 90013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info, 90023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info, 90033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info; 90043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 90053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XWindowChanges 90063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes; 90073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 90083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 90093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Convert text string to a text list. 90103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 90113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(display != (Display *) NULL); 90123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(resource_info != (XResourceInfo *) NULL); 90133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(windows != (XWindows *) NULL); 90143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(title != (const char *) NULL); 90153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(textlist != (const char **) NULL); 90163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",title); 90173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickTrue); 90183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 90193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (textlist == (const char **) NULL) 90203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 90213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XNoticeWidget(display,windows,"No text to view:",(char *) NULL); 90223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return; 90233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 90243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 90253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine Text View widget attributes. 90263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 90273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info=windows->widget.font_info; 90283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info=(XFontStruct *) NULL; 90293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (mono != MagickFalse) 90303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info=XBestFont(display,resource_info,MagickTrue); 90313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text_info == (XFontStruct *) NULL) 90323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info=windows->widget.font_info; 90333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width=0; 90343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; textlist[i] != (char *) NULL; i++) 90353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (WidgetTextWidth(text_info,(char *) textlist[i]) > text_width) 90363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_width=(unsigned int) XTextWidth(text_info,(char *) textlist[i], 90373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMin(Extent(textlist[i]),160)); 90383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy lines=(unsigned int) i; 90393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width=WidgetTextWidth(font_info,DismissButtonText); 90403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy width+=QuantumMargin; 90413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) (text_info->ascent+text_info->descent); 90423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 90433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Position Text View widget. 90443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 90453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=(unsigned int) (MagickMin((int) text_width, 90463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) MaxTextWidth)+5*QuantumMargin); 90473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_width=(unsigned int) (MinTextWidth+4*QuantumMargin); 90483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.width < windows->widget.min_width) 90493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=windows->widget.min_width; 90503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) (MagickMin(MagickMax((int) lines,3),32)* 90513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height+((13*height) >> 1)+((9*QuantumMargin) >> 1)); 90523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.min_height=(unsigned int) (3*height+((13*height) >> 1)+((9* 90533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy QuantumMargin) >> 1)); 90543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.height < windows->widget.min_height) 90553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=windows->widget.min_height; 90563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XConstrainWindowPosition(display,&windows->widget); 90573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 90583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Map Text View widget. 90593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 9060151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(windows->widget.name,title,MagickPathExtent); 90613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=XStringListToTextProperty(&windows->widget.name,1,&window_name); 90623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (status != False) 90633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 90643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMName(display,windows->widget.id,&window_name); 90653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetWMIconName(display,windows->widget.id,&window_name); 90663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFree((void *) window_name.value); 90673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 90683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.width=(int) windows->widget.width; 90693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.height=(int) windows->widget.height; 90703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.x=windows->widget.x; 90713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy window_changes.y=windows->widget.y; 90723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XReconfigureWMWindow(display,windows->widget.id, 90733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.screen,(unsigned int) mask,&window_changes); 90743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XMapRaised(display,windows->widget.id); 90753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.mapped=MagickFalse; 90763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 90773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to X events. 90783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 90793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&slider_info); 90803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&north_info); 90813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&south_info); 90823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&expose_info); 9083f170e1240316e694f7f6464842c83a8f1bb71011cristy XGetWidgetInfo((char *) NULL,&selection_info); 90843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visible_lines=0; 90853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime << 2; 90863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy height=(unsigned int) (font_info->ascent+font_info->descent); 90873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state=UpdateConfigurationState; 90883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy do 90893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 90903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & UpdateConfigurationState) 90913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 90923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 90933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id; 90943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 90953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 90963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize button information. 90973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 90983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo(DismissButtonText,&dismiss_info); 90993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.width=width; 91003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.height=(unsigned int) ((3*height) >> 1); 91013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.x=(int) windows->widget.width-dismiss_info.width- 91023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy QuantumMargin-2; 91033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.y=(int) windows->widget.height-dismiss_info.height- 91043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy QuantumMargin; 91053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 91063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize scroll information. 91073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 91083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&scroll_info); 91093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.bevel_width--; 91103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.width=height; 91113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.height=(unsigned int) (dismiss_info.y-((5*QuantumMargin) >> 91123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1)); 91133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.x=(int) windows->widget.width-QuantumMargin- 91143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.width; 91153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.y=(3*QuantumMargin) >> 1; 91163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.raised=MagickFalse; 91173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.trough=MagickTrue; 91183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info=scroll_info; 91193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.raised=MagickTrue; 91203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.width-=(north_info.bevel_width << 1); 91213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.height=north_info.width-1; 91223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.x+=north_info.bevel_width; 91233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.y+=north_info.bevel_width; 91243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info=north_info; 91253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.y=scroll_info.y+scroll_info.height-scroll_info.bevel_width- 91263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.height; 91273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=slider_info.id; 91283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info=north_info; 91293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=id; 91303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.width-=2; 91313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.min_y=north_info.y+north_info.height+north_info.bevel_width+ 91323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width+2; 91333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.height=scroll_info.height-((slider_info.min_y- 91343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy scroll_info.y+1) << 1)+4; 91353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy visible_lines=scroll_info.height/(text_info->ascent+text_info->descent+ 91363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((text_info->ascent+text_info->descent) >> 3)); 91373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (lines > visible_lines) 91383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.height=(unsigned int) (visible_lines*slider_info.height)/ 91393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy lines; 91403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.max_y=south_info.y-south_info.bevel_width- 91413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width-2; 91423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.x=scroll_info.x+slider_info.bevel_width+1; 91433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 91443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info=scroll_info; 91453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y; 91463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 91473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize list information. 91483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 91493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&list_info); 91503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.raised=MagickFalse; 91513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.bevel_width--; 91523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.width=(unsigned int) scroll_info.x-((3*QuantumMargin) >> 1); 91533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.height=scroll_info.height; 91543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.x=QuantumMargin; 91553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.y=scroll_info.y; 91563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 91573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize selection information. 91583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 91593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XGetWidgetInfo((char *) NULL,&selection_info); 91603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.center=MagickFalse; 91613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.width=list_info.width; 91623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.height=(unsigned int) 91633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (9*(text_info->ascent+text_info->descent)) >> 3; 91643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.x=list_info.x; 91653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~UpdateConfigurationState); 91663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 91673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawWidgetState) 91683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 91693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 91703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw Text View window. 91713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 91723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,&windows->widget,&list_info); 91733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledMatte(display,&windows->widget,&scroll_info); 91743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,&windows->widget,&north_info); 91753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&slider_info); 91763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,&windows->widget,&south_info); 91773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&dismiss_info); 91783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XHighlightWidget(display,&windows->widget,BorderOffset,BorderOffset); 91793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 91803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 91813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawWidgetState); 91823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 91833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & RedrawListState) 91843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 91853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 91863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Determine slider id and position. 91873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 91883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id >= (int) (lines-visible_lines)) 91893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=(int) lines-visible_lines; 91903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((slider_info.id < 0) || (lines <= visible_lines)) 91913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 91923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 91933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (lines != 0) 91943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y+= 91953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id*(slider_info.max_y-slider_info.min_y+1)/lines; 91963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id != selection_info.id) 91973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 91983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 91993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Redraw scroll bar and text. 92003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 92013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.font_info=text_info; 92023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetFont(display,windows->widget.annotate_context, 92033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->fid); 92043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetFont(display,windows->widget.highlight_context, 92053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy text_info->fid); 92063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=slider_info.id; 92073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y=list_info.y+(height >> 3)+2; 92083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy for (i=0; i < (int) visible_lines; i++) 92093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 92103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.raised= 92113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (slider_info.id+i) != list_info.id ? MagickTrue : MagickFalse; 92123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=(char *) NULL; 92133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((slider_info.id+i) < (int) lines) 92143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.text=(char *) textlist[slider_info.id+i]; 92153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawWidgetText(display,&windows->widget,&selection_info); 92163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.y+=(int) selection_info.height; 92173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 92183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.font_info=font_info; 92193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetFont(display,windows->widget.annotate_context, 92203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info->fid); 92213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetFont(display,windows->widget.highlight_context, 92223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy font_info->fid); 92233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 92243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update slider. 92253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 92263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y > expose_info.y) 92273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 92283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.height=(unsigned int) slider_info.y-expose_info.y; 92293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y-expose_info.height- 92303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width-1; 92313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 92323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 92333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 92343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.height=(unsigned int) expose_info.y-slider_info.y; 92353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y+slider_info.height+ 92363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.bevel_width+1; 92373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 92383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,&windows->widget,&north_info); 92393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawMatte(display,&windows->widget,&expose_info); 92403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&slider_info); 92413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,&windows->widget,&south_info); 92423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy expose_info.y=slider_info.y; 92433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 92443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~RedrawListState); 92453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 92463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 92473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Wait for next event. 92483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 92493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (north_info.raised && south_info.raised) 92503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XIfEvent(display,&event,XScreenEvent,(char *) windows); 92513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 92523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 92533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 92543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Brief delay before advancing scroll bar. 92553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 92563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDelay(display,delay); 92573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime; 92583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XCheckIfEvent(display,&event,XScreenEvent,(char *) windows); 92593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (north_info.raised == MagickFalse) 92603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id > 0) 92613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 92623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 92633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider up. 92643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 92653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id--; 92663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 92673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 92683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (south_info.raised == MagickFalse) 92693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id < (int) lines) 92703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 92713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 92723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider down. 92733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 92743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id++; 92753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 92763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 92773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.type != ButtonRelease) 92783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy continue; 92793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 92803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch (event.type) 92813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 92823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonPress: 92833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 92843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(slider_info,event.xbutton)) 92853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 92863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 92873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Track slider. 92883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 92893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.active=MagickTrue; 92903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 92913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 92923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(north_info,event.xbutton)) 92933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id > 0) 92943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 92953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 92963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider up. 92973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 92983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.raised=MagickFalse; 92993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id--; 93003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 93013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 93023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 93033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(south_info,event.xbutton)) 93043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.id < (int) lines) 93053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 93063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 93073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider down. 93083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 93093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.raised=MagickFalse; 93103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id++; 93113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 93123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 93133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 93143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(scroll_info,event.xbutton)) 93153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 93163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 93173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider. 93183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 93193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.y < slider_info.y) 93203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id-=(visible_lines-1); 93213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 93223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id+=(visible_lines-1); 93233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 93243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 93253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 93263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(dismiss_info,event.xbutton)) 93273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 93283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 93293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed Dismiss button. 93303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 93313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.raised=MagickFalse; 93323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&dismiss_info); 93333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 93343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 93353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(list_info,event.xbutton)) 93363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 93373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int 93383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id; 93393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 93403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static Time 93413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy click_time; 93423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 93433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 93443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User pressed list matte. 93453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 93463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy id=slider_info.id+(event.xbutton.y-(list_info.y+(height >> 1))+1)/ 93473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.height; 93483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (id >= (int) lines) 93493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 93503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (id != list_info.id) 93513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 93523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=id; 93533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy click_time=event.xbutton.time; 93543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 93553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 93563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=id; 93573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.time >= (click_time+DoubleClick)) 93583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 93593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy click_time=event.xbutton.time; 93603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 93613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 93623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy click_time=event.xbutton.time; 93633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 93643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Become the XA_PRIMARY selection owner. 93653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 93663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CopyMagickString(primary_selection,textlist[list_info.id], 9367151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 93683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetSelectionOwner(display,XA_PRIMARY,windows->widget.id, 93693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy event.xbutton.time); 93703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (XGetSelectionOwner(display,XA_PRIMARY) != windows->widget.id) 93713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 93723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 93733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=id; 93743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 93753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 93763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 93773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 93783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 93793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ButtonRelease: 93803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 93813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (windows->widget.mapped == MagickFalse) 93823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 93833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (north_info.raised == MagickFalse) 93843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 93853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 93863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User released up button. 93873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 93883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime << 2; 93893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy north_info.raised=MagickTrue; 93903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleNorth(display,&windows->widget,&north_info); 93913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 93923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (south_info.raised == MagickFalse) 93933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 93943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 93953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy User released down button. 93963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 93973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy delay=SuspendTime << 2; 93983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy south_info.raised=MagickTrue; 93993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawTriangleSouth(display,&windows->widget,&south_info); 94003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 94013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.active) 94023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 94033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 94043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Stop tracking slider. 94053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 94063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.active=MagickFalse; 94073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 94093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (dismiss_info.raised == MagickFalse) 94103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 94113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xbutton.window == windows->widget.id) 94123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (MatteIsActive(dismiss_info,event.xbutton)) 94133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 94143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.raised=MagickTrue; 94153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&dismiss_info); 94163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 94173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 94193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ClientMessage: 94203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 94213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 94223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy If client window delete message, exit. 94233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 94243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.message_type != windows->wm_protocols) 94253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l == (int) windows->wm_take_focus) 94273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 94283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSetInputFocus(display,event.xclient.window,RevertToParent, 94293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (Time) event.xclient.data.l[1]); 94303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 94323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (*event.xclient.data.l != (int) windows->wm_delete_window) 94333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xclient.window == windows->widget.id) 94353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 94363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 94373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 94393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 94413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case ConfigureNotify: 94423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 94433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 94443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Update widget configuration. 94453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 94463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xconfigure.window != windows->widget.id) 94473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((event.xconfigure.width == (int) windows->widget.width) && 94493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (event.xconfigure.height == (int) windows->widget.height)) 94503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.width=(unsigned int) 94523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.width,(int) windows->widget.min_width); 94533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy windows->widget.height=(unsigned int) 94543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickMax(event.xconfigure.height,(int) windows->widget.min_height); 94553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=UpdateConfigurationState; 94563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 94583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case EnterNotify: 94593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 94603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 94613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state&=(~InactiveWidgetState); 94633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 94653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case Expose: 94663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 94673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.window != windows->widget.id) 94683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xexpose.count != 0) 94703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawWidgetState; 94723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 94743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyPress: 94753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 94763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static char 9477151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy command[MagickPathExtent]; 94783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 94793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static int 94803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length; 94813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 94823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy static KeySym 94833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy key_symbol; 94843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 94853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 94863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Respond to a user key press. 94873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 94883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xkey.window != windows->widget.id) 94893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy length=XLookupString((XKeyEvent *) &event.xkey,command, 94913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (int) sizeof(command),&key_symbol,(XComposeStatus *) NULL); 94923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *(command+length)='\0'; 94933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((key_symbol == XK_Return) || (key_symbol == XK_KP_Enter)) 94943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 94953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.raised=MagickFalse; 94963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&dismiss_info); 94973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=ExitState; 94983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 94993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 95003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (AreaIsActive(scroll_info,event.xkey)) 95013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 95023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 95033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider. 95043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 95053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy switch ((int) key_symbol) 95063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 95073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Home: 95083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Home: 95093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 95103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 95113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 95123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 95133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Up: 95143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Up: 95153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 95163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id--; 95173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 95183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 95193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Down: 95203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Down: 95213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 95223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id++; 95233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 95243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 95253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Prior: 95263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Prior: 95273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 95283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id-=visible_lines; 95293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 95303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 95313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_Next: 95323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_Next: 95333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 95343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id+=visible_lines; 95353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 95363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 95373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_End: 95383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case XK_KP_End: 95393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 95403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=(int) lines; 95413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 95423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 95433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 95443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 95453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 95463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 95473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 95483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 95493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case KeyRelease: 95503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 95513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case LeaveNotify: 95523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 95533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (event.xcrossing.window != windows->widget.id) 95543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 95553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=InactiveWidgetState; 95563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 95573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 95583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MapNotify: 95593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 95603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask&=(~CWX); 95613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy mask&=(~CWY); 95623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 95633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 95643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case MotionNotify: 95653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 95663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 95673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Discard pending button motion events. 95683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 95693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy while (XCheckMaskEvent(display,ButtonMotionMask,&event)) ; 95703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.active) 95713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 95723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 95733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Move slider matte. 95743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 95753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=event.xmotion.y- 95763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ((slider_info.height+slider_info.bevel_width) >> 1)+1; 95773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y < slider_info.min_y) 95783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.min_y; 95793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y > slider_info.max_y) 95803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.y=slider_info.max_y; 95813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=0; 95823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (slider_info.y != slider_info.min_y) 95833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy slider_info.id=(int) (lines*(slider_info.y-slider_info.min_y+1))/ 95843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (slider_info.max_y-slider_info.min_y+1); 95853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 95863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 95873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 95883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (state & InactiveWidgetState) 95893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 95903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (dismiss_info.raised == MatteIsActive(dismiss_info,event.xmotion)) 95913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 95923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 95933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Dismiss button status changed. 95943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 95953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.raised= 95963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dismiss_info.raised == MagickFalse ? MagickTrue : MagickFalse; 95973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XDrawBeveledButton(display,&windows->widget,&dismiss_info); 95983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 95993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 96003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 96013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 96023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionClear: 96033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 96043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy list_info.id=(~0); 96053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy selection_info.id=(~0); 96063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy state|=RedrawListState; 96073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 96083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 96093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy case SelectionRequest: 96103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 96113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSelectionEvent 96123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify; 96133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 96143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSelectionRequestEvent 96153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *request; 96163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 96173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (list_info.id == (~0)) 96183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 96193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 96203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Set primary selection. 96213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 96223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy request=(&(event.xselectionrequest)); 96233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XChangeProperty(request->display,request->requestor, 96243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy request->property,request->target,8,PropModeReplace, 96253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (unsigned char *) primary_selection,Extent(primary_selection)); 96263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.type=SelectionNotify; 96273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.send_event=MagickTrue; 96283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.display=request->display; 96293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.requestor=request->requestor; 96303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.selection=request->selection; 96313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.target=request->target; 96323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.time=request->time; 96333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (request->property == None) 96343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.property=request->target; 96353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy else 96363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy notify.property=request->property; 96373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XSendEvent(request->display,request->requestor,False,NoEventMask, 96383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (XEvent *) ¬ify); 96393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 96403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy default: 96413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 96423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 96433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } while ((state & ExitState) == 0); 96443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (text_info != windows->widget.font_info) 96453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XFreeFont(display,text_info); 96463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XSetCursorState(display,windows,MagickFalse); 96473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) XWithdrawWindow(display,windows->widget.id,windows->widget.screen); 96483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy XCheckRefreshWindows(display,windows); 96493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 96503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 9651