about summary refs log tree commit diff stats
path: root/src/profanity.c
Commit message (Collapse)AuthorAgeFilesLines
...
* Removed ui_titlebar_presenceJames Booth2015-11-021-4/+4
|
* Removed ui_get_chat_recipientsJames Booth2015-11-021-1/+1
|
* Removed ui_input_nonblocking()James Booth2015-11-011-1/+1
|
* Removed ui_readline()James Booth2015-11-011-1/+1
|
* Applied coding style to src/James Booth2015-10-261-2/+2
|
* Removed --disable-tls command line optionJames Booth2015-10-181-5/+5
|
* Add ability to script commands after connectJames Booth2015-10-151-0/+2
|
* Use lastactivity preference for presence updatesJames Booth2015-10-141-2/+10
|
* Added auto xa option, tidied autoaway codeJames Booth2015-09-271-40/+110
|
* Tidied autoaway codeJames Booth2015-09-251-22/+20
|
* Allow autoaway when status is dndJames Booth2015-09-251-1/+4
|
* Set status to what it was before autoawayJames Booth2015-09-251-4/+8
|
* Send current presence when autoaway mode idleJames Booth2015-09-251-1/+1
|
* Include last activity with autoaway mode awayJames Booth2015-09-251-1/+1
|
* Save trusted certificates to tlscerts file with more informationJames Booth2015-09-241-0/+4
|
* log: Introduced stderr log handlerDmitry Podgorny2015-06-231-0/+3
| | | | | | | | This handler redirects stderr output to a pipe and gathers logs from the read end. The handler is called from main loop, therefore, if a function prints logs to stderr they will be put to log file only after function returns.
* shutdown: Call prefs_close() after log_close()Dmitry Podgorny2015-06-221-1/+1
| | | | | | log_msg() uses prefs, so prefs_close() should be called after log_close(). It makes possible to use logs in other finalisation functions.
* Merge branch 'master' into openpgpJames Booth2015-06-171-1/+3
|\
| * Removed wins_get_current_* functionsJames Booth2015-06-171-1/+3
| |
* | Merge branch 'master' into openpgpJames Booth2015-06-171-5/+7
|\| | | | | | | | | | | Conflicts: src/command/commands.c src/command/commands.h
| * Added current window reference to command functionsJames Booth2015-06-171-2/+2
| |
| * Pass current window to autocompletersJames Booth2015-06-161-3/+5
| |
* | Merge branch 'master' into openpgpJames Booth2015-06-151-1/+1
|\|
| * Moved ui/windows -> window_listJames Booth2015-06-151-1/+1
| |
* | Merge branch 'master' into openpgpJames Booth2015-06-051-1/+1
|\| | | | | | | | | Conflicts: .travis.yml
| * Added initial stabber testJames Booth2015-05-171-1/+1
| |
* | Merge branch 'master' into openpgpJames Booth2015-05-071-4/+5
|\|
| * Added cl_ev_presence_sendJames Booth2015-05-071-4/+5
| |
* | Merge branch 'master' into openpgpJames Booth2015-05-071-4/+4
|\|
| * Renamed presence_update -> presence_sendJames Booth2015-05-071-4/+4
| |
* | Merge branch 'master' into pgpJames Booth2015-05-041-2/+2
|\|
| * Use null check convention in profanity.cJames Booth2015-05-041-2/+2
| |
* | Added signature verification, /pgp fps commandJames Booth2015-03-241-0/+3
| |
* | Added pgp key list commandJames Booth2015-03-221-0/+6
|/
* Merge branch 'master' into readlineJames Booth2015-02-111-1/+1
|\ | | | | | | | | | | Conflicts: src/tools/history.c src/tools/history.h
| * Updated copyrightJames Booth2015-02-101-1/+1
| |
* | Moved command processing to main loop, allow resize during password promptJames Booth2015-02-051-1/+9
| |
* | Move SIGWINCH handling to ui/core.c, ignore signal whilst resizingJames Booth2015-02-041-0/+1
| |
* | Moved input blocking code to inputwin.cJames Booth2015-01-311-2/+0
| |
* | Added idle and activity handlersJames Booth2015-01-311-0/+2
| |
* | Moved readline code to inputwin.cJames Booth2015-01-301-42/+3
| |
* | Added gnu readlineJames Booth2015-01-271-13/+47
|/
* Moved input line to inputwinJames Booth2015-01-151-1/+1
|
* Moved input to ui module, renamed ui_readlineJames Booth2015-01-151-7/+6
|
* Tidy main loopJames Booth2015-01-151-10/+9
|
* Moved process_input to cmd_process_inputJames Booth2015-01-151-47/+14
|
* Moved input size variable to ui moduleJames Booth2015-01-151-5/+2
|
* Moved string termination out of main loopJames Booth2015-01-151-1/+0
|
* Removed ch from main loopJames Booth2015-01-151-5/+6
|
* Tidy profanity.cJames Booth2015-01-151-10/+12
|
f' href='/acidbong/suckless/dwm/commit/draw.c?h=5.8&id=8a34fa50f75f4d6d8af234ac0c4f6d40b988d700'>8a34fa5 ^
9e8b325 ^


8a34fa5 ^



9e8b325 ^


8a34fa5 ^

9e8b325 ^
8a34fa5 ^


8a34fa5 ^
9e8b325 ^







8a34fa5 ^



9e8b325 ^






650a1fb ^
9e8b325 ^

8a34fa5 ^
9e8b325 ^
8a34fa5 ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158







                                                                   

                        
                

           
                

                         




                                                                         

                        

                                  

                        

                                                                          


    
                                       
 

                         

                             
                                                  
 

                                                        
 
              
                  
                             
 
                 

                       
                           

                                      
                               

                     


                                                         

                                       
                                                       

                               
                    

                                      




                                                                         


                                                


                                                                                  


         

                             

                     

                                                     



                                                            
            
                                    
 
                     

                                                                 

                               
                                                    


            
                 
 
                                          


    
                             

                             
                 
 
                       
                              


                                                                       



                                                                             


                                                       

                 
                         


                                              
 







                                                                                 



                                 






                                                                     
                                                                   

                                                         
         
                                                          
 
/*
 * (C)opyright MMIV-MMVI Anselm R. Garbe <garbeam at gmail dot com>
 * See LICENSE file for license details.
 */

#include <stdio.h>
#include <string.h>

#include <X11/Xlocale.h>

#include "dwm.h"

static void
drawborder(void)
{
	XPoint points[5];
	XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
	XSetForeground(dpy, dc.gc, dc.border);
	points[0].x = dc.x;
	points[0].y = dc.y;
	points[1].x = dc.w - 1;
	points[1].y = 0;
	points[2].x = 0;
	points[2].y = dc.h - 1;
	points[3].x = -(dc.w - 1);
	points[3].y = 0;
	points[4].x = 0;
	points[4].y = -(dc.h - 1);
	XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious);
}

void
drawtext(const char *text, Bool border)
{
	int x, y, w, h;
	unsigned int len;
	static char buf[256];
	XGCValues gcv;
	XRectangle r = { dc.x, dc.y, dc.w, dc.h };

	XSetForeground(dpy, dc.gc, dc.bg);
	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);

	w = 0;
	if(border)
		drawborder();

	if(!text)
		return;

	len = strlen(text);
	if(len >= sizeof(buf))
		len = sizeof(buf) - 1;
	memcpy(buf, text, len);
	buf[len] = 0;

	h = dc.font.ascent + dc.font.descent;
	y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
	x = dc.x + (h / 2);

	/* shorten text if necessary */
	while(len && (w = textnw(buf, len)) > dc.w - h)
		buf[--len] = 0;

	if(w > dc.w)
		return; /* too long */

	gcv.foreground = dc.fg;
	gcv.background = dc.bg;
	if(dc.font.set) {
		XChangeGC(dpy, dc.gc, GCForeground | GCBackground, &gcv);
		XmbDrawImageString(dpy, dc.drawable, dc.font.set, dc.gc,
				x, y, buf, len);
	}
	else {
		gcv.font = dc.font.xfont->fid;
		XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv);
		XDrawImageString(dpy, dc.drawable, dc.gc, x, y, buf, len);
	}
}

unsigned long
initcolor(const char *colstr)
{
	XColor color;
	Colormap cmap = DefaultColormap(dpy, screen);

	XAllocNamedColor(dpy, cmap, colstr, &color, &color);
	return color.pixel;
}

unsigned int
textnw(char *text, unsigned int len)
{
	XRectangle r;
	if(dc.font.set) {
		XmbTextExtents(dc.font.set, text, len, NULL, &r);
		return r.width;
	}
	return XTextWidth(dc.font.xfont, text, len);
}

unsigned int
textw(char *text)
{
	return textnw(text, strlen(text));
}

void
initfont(const char *fontstr)
{
	char **missing, *def;
	int i, n;

	missing = NULL;
	setlocale(LC_ALL, "");
	if(dc.font.set)
		XFreeFontSet(dpy, dc.font.set);
	dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
	if(missing) {
		while(n--)
			fprintf(stderr, "missing fontset: %s\n", missing[n]);
		XFreeStringList(missing);
		if(dc.font.set) {
			XFreeFontSet(dpy, dc.font.set);
			dc.font.set = NULL;
		}
	}
	if(dc.font.set) {
		XFontSetExtents *font_extents;
		XFontStruct **xfonts;
		char **font_names;

		dc.font.ascent = dc.font.descent = 0;
		font_extents = XExtentsOfFontSet(dc.font.set);
		n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names);
		for(i = 0, dc.font.ascent = 0, dc.font.descent = 0; i < n; i++) {
			if(dc.font.ascent < (*xfonts)->ascent)
				dc.font.ascent = (*xfonts)->ascent;
			if(dc.font.descent < (*xfonts)->descent)
				dc.font.descent = (*xfonts)->descent;
			xfonts++;
		}
	}
	else {
		if(dc.font.xfont)
			XFreeFont(dpy, dc.font.xfont);
		dc.font.xfont = NULL;
		dc.font.xfont = XLoadQueryFont(dpy, fontstr);
		if (!dc.font.xfont)
			dc.font.xfont = XLoadQueryFont(dpy, "fixed");
		if (!dc.font.xfont)
			error("error, cannot init 'fixed' font\n");
		dc.font.ascent = dc.font.xfont->ascent;
		dc.font.descent = dc.font.xfont->descent;
	}
	dc.font.height = dc.font.ascent + dc.font.descent;
}