LINUX.ORG.RU

Гжель


1

0

чуть пропатченный dwm, почти стандартные коньки, самодельная обоина, шрифт - CyrillicOld, к dwm пока не прикрутил

http://img206.imageshack.us/img206/8599/snapshotcr5.png

>>> Просмотр (1280x1024, 192 Kb)



Проверено: JB ()

Ответ на: комментарий от michwill

Круть, концептуально, но долго за таким не поработаешь. ярко очень, хотя может это у меня моник слишком светлый. +1

anonymous
()

Необычно, но вот, как то в депрессняк вводит...

mango ★★★
()
Ответ на: комментарий от Gharik

Да и пузырь на скрине явно прославляет шнапсоведение.

Gharik
()

синий слишком сильно глаза напрягает.

phasma ★☆
()

охренеть, примерно как танк под хохлому разрисовать

filin ★★
()
Ответ на: комментарий от gnomino

> А хохлы будут срать в комментах?

Уже.

anonymous
()

Лепота!

anonymous
()

Спасибо, очень понравилось

LeniVetc
()

ЗАЧОТ!!! ОЧЕНЬ ПОНРАВИЛОСЬ!!

anonymous
()

"время равоты" выглядит фееричненько.

Шрифты говно.

AnDoR ★★★★★
()

мицгол, перелогиньтесь!

swar0g ★★★★
()

своеобразно.

шрифты, как ни странно, выглядят неплохо

enby ★★
()

Ат, что ж такое та, от жеж бл.. ну ё.. да тыж чтож.. порадовал!

xintrea
()
Ответ на: комментарий от anonymous

>эпик вин. алсо, патчи-то доставь.

завтра днем, как раз dmenu до ума доведу

z0D5e8n7x
() автор топика
Ответ на: комментарий от delirio

питёрка по Русски. 3ачётный мужык

ggrn ★★★★★
()

Какая прелесть, просто потрясающе! Автор, спасибо Вам огромное! (:

Хватит уже всякой кислоты на любимом месте, пора возвратиться к нашим корням, нашему искусству, ничто западное не сравниться с такими чудесами!

anonymous
()

Шикарно! Самый оригинальный скрин за ооочень долгое время

lazyklimm ★★★★★
()

вся, я попал, яндекс.директ теперь в каждом блоке предлагает мне гжель и хохолому ((

уроды, буду пользоваться только гуглом ((

z0D5e8n7x
() автор топика

меня внезапно осенило: на белом EeePC эта тема будет очень классно смотреться вот еще бы на нем самом подобные росписи сделать

wd
()
Ответ на: комментарий от wd

>вот еще бы на нем самом подобные росписи сделать

То его можно будет продавать на 100 баксив дороже ;) Кстати, класснющий сувенир -- всяк поприкольнее матрешки.

gnomino
()
Ответ на: комментарий от wd

>меня внезапно осенило: на белом EeePC эта тема будет очень классно смотреться вот еще бы на нем самом подобные росписи сделать

меня это посетило еще вчера, осталось купить eeepc

z0D5e8n7x
() автор топика

имхо концепт оригинальный, но неюзабельно. я сказал ИМХО.

dj_kane ★★
()

Отличный скриншот, оригинально :)

Amp ★★★
()

Ъ, очень понравилось :)

GFORGX ★★★
()

Автор - молодец. Добрая картинка, никакой агрессии, и родная. И не сильно контрастная - глаза не режет.

mvm
()

Рулез!!! А ещё можно было бы роспись цветочками на черном (не знаю как называется)... :)

fpga
()
Ответ на: комментарий от fpga

Отличный скриншот!

Только сеть в коньках поплыла, поправь (имхо, следует розтянуть графики)

val-amart ★★★★★
()

Красиво, но работать за этим невозможно.

DukE-M ★★
()

по просьбам трудящихся патч для Xft на dmenu

--- original/dmenu-3.7/dmenu.c	2008-06-18 21:20:41.000000000 +0400
+++ dmenu-3.7/dmenu.c	2008-10-12 16:55:40.000000000 +0400
@@ -10,6 +10,7 @@
 #include <X11/keysym.h>
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
+#include <X11/Xft/Xft.h>
 #ifdef XINERAMA
 #include <X11/extensions/Xinerama.h>
 #endif
@@ -27,14 +28,20 @@
 	int x, y, w, h;
 	ulong norm[ColLast];
 	ulong sel[ColLast];
+	XftColor *xftnorm;
+	XftColor *xftsel;
 	Drawable drawable;
+	XftDraw *xftdrawable;
 	GC gc;
 	struct {
-		XFontStruct *xfont;
+/*		XFontStruct *xfont;
 		XFontSet set;
 		int ascent;
-		int descent;
+		int descent;*/
+		XftFont *xftfont;
+		XGlyphInfo *extents;
 		int height;
+		int width;
 	} font;
 } DC; /* draw context */
 
@@ -161,10 +168,10 @@
 		free(allitems);
 		allitems = itm;
 	}
-	if(dc.font.set)
+	/*if(dc.font.set)
 		XFreeFontSet(dpy, dc.font.set);
 	else
-		XFreeFont(dpy, dc.font.xfont);
+		XFreeFont(dpy, dc.font.xfont);*/
 	XFreePixmap(dpy, dc.drawable);
 	XFreeGC(dpy, dc.gc);
 	XDestroyWindow(dpy, win);
@@ -229,11 +236,15 @@
 		len = sizeof buf - 1;
 	memcpy(buf, text, len);
 	buf[len] = 0;
-	h = dc.font.ascent + dc.font.descent;
+	/*h = dc.font.ascent + dc.font.descent;
 	y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
-	x = dc.x + (h / 2);
+	x = dc.x + (h / 2);*/
+	h = dc.font.height;
+	y = mh/2 + h/2-3;
+	x = dc.x+h/2;
 	/* shorten text if necessary */
-	while(len && (w = textnw(buf, len)) > dc.w - h)
+	//while(len && (w = textnw(buf, len)) > dc.w - h)
+	while(len && (w = textnw(buf, len)) > dc.w)
 		buf[--len] = 0;
 	if(len < olen) {
 		if(len > 1)
@@ -246,10 +257,11 @@
 	if(w > dc.w)
 		return; /* too long */
 	XSetForeground(dpy, dc.gc, col[ColFG]);
-	if(dc.font.set)
+	/*if(dc.font.set)
 		XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
 	else
-		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
+		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);*/
+	XftDrawStringUtf8(dc.xftdrawable, (col==dc.norm) ? dc.xftnorm : dc.xftsel ,dc.font.xftfont,x,y,buf,len);
 }
 
 void *
@@ -301,7 +313,7 @@
 
 	if(!fontstr || fontstr[0] == '\0')
 		eprint("error, cannot load font: '%s'\n", fontstr);
-	missing = NULL;
+	/*missing = NULL;
 	if(dc.font.set)
 		XFreeFontSet(dpy, dc.font.set);
 	dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
@@ -332,7 +344,16 @@
 		dc.font.ascent = dc.font.xfont->ascent;
 		dc.font.descent = dc.font.xfont->descent;
 	}
-	dc.font.height = dc.font.ascent + dc.font.descent;
+	dc.font.height = dc.font.ascent + dc.font.descent;*/
+	dc.font.xftfont = XftFontOpenXlfd(dpy,screen,fontstr);
+	if(!dc.font.xftfont)
+		dc.font.xftfont = XftFontOpenName(dpy,screen,fontstr);
+	if(!dc.font.xftfont)
+		eprint("error, cannot load font: '%s'\n", fontstr);
+	dc.font.extents = malloc(sizeof(XGlyphInfo));
+	XftTextExtentsUtf8(dpy,dc.font.xftfont,fontstr, strlen(fontstr), dc.font.extents);
+	dc.font.height = dc.font.xftfont->height;
+	dc.font.width = (dc.font.extents->width)/strlen(fontstr);
 }
 
 void
@@ -617,6 +638,12 @@
 	dc.norm[ColFG] = getcolor(normfgcolor);
 	dc.sel[ColBG] = getcolor(selbgcolor);
 	dc.sel[ColFG] = getcolor(selfgcolor);
+	dc.xftsel=malloc(sizeof(XftColor));
+	dc.xftnorm=malloc(sizeof(XftColor));
+	XftColorAllocName(dpy,DefaultVisual(dpy,screen),DefaultColormap(dpy,screen),s
elfgcolor, dc.xftsel);
+	XftColorAllocName(dpy,DefaultVisual(dpy,screen),DefaultColormap(dpy,screen),n
ormfgcolor, dc.xftnorm);
+	if(!dc.xftnorm || !dc.xftnorm)
+		eprint("error, cannot allocate color\n");
 	initfont(font);
 
 	/* menu window */
@@ -625,7 +652,8 @@
 	wa.event_mask = ExposureMask | ButtonPressMask | KeyPressMask;
 
 	/* menu window geometry */
-	mh = dc.font.height + 2;
+//	mh = dc.font.height + 2;
+	mh = dc.font.extents->height + 2;
 #if XINERAMA
 	if(XineramaIsActive(dpy)) {
 		info = XineramaQueryScreens(dpy, &i);
@@ -651,8 +679,11 @@
 	dc.drawable = XCreatePixmap(dpy, root, mw, mh, DefaultDepth(dpy, screen));
 	dc.gc = XCreateGC(dpy, root, 0, 0);
 	XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
-	if(!dc.font.set)
-		XSetFont(dpy, dc.gc, dc.font.xfont->fid);
+	/*if(!dc.font.set)
+		XSetFont(dpy, dc.gc, dc.font.xfont->fid);*/
+	dc.xftdrawable = XftDrawCreate(dpy, dc.drawable, DefaultVisual(dpy,screen),DefaultColormap(dpy,screen));
+	if(!dc.xftdrawable)
+		eprint("error, cannot create drawable\n");
 	if(maxname)
 		cmdw = textw(maxname);
 	if(cmdw > mw / 3)
@@ -668,18 +699,23 @@
 
 int
 textnw(const char *text, uint len) {
-	XRectangle r;
+	/*XRectangle r;
 
 	if(dc.font.set) {
 		XmbTextExtents(dc.font.set, text, len, NULL, &r);
 		return r.width;
 	}
-	return XTextWidth(dc.font.xfont, text, len);
-}
+	return XTextWidth(dc.font.xfont, text, len);*/
+	XftTextExtentsUtf8(dpy,dc.font.xftfont,text, strlen(text), dc.font.extents);
+	if(dc.font.extents->height > dc.font.height)
+		dc.font.height = dc.font.extents->height;
+	return dc.font.extents->width;
+}	
 
 int
 textw(const char *text) {
-	return textnw(text, strlen(text)) + dc.font.height;
+	//return textnw(text, strlen(text)) + dc.font.height;
+	return textnw(text, strlen(text)) + 2*dc.font.width;
 }
 
 int

z0D5e8n7x
() автор топика

алсо, патч для Xft на dwm, тут еще прикручена немного другая окарска тулбара, и мой авторан, если надо авторан тоже выложу

--- original/dwm-5.0.1/dwm.c	2008-06-19 12:11:38.000000000 +0400
+++ dwm-5.0.1/dwm.c	2008-10-12 16:56:05.000000000 +0400
@@ -39,6 +39,7 @@
 #include <X11/Xlib.h>
 #include <X11/Xproto.h>
 #include <X11/Xutil.h>
+#include <X11/Xft/Xft.h>
 #ifdef XINERAMA
 #include <X11/extensions/Xinerama.h>
 #endif
@@ -52,7 +53,7 @@
 #define MAXTAGLEN       16
 #define MOUSEMASK       (BUTTONMASK|PointerMotionMask)
 #define TAGMASK         ((int)((1LL << LENGTH(tags)) - 1))
-#define TEXTW(x)        (textnw(x, strlen(x)) + dc.font.height)
+#define TEXTW(x)        (textnw(x, strlen(x)) + 2*dc.font.height)
 
 /* enums */
 enum { CurNormal, CurResize, CurMove, CurLast };        /* cursor */
@@ -99,14 +100,21 @@
 	int x, y, w, h;
 	ulong norm[ColLast];
 	ulong sel[ColLast];
+	XftColor *xftnorm;
+	XftColor *xftsel;
 	Drawable drawable;
+	XftDraw *xftdrawable;
 	GC gc;
 	struct {
-		int ascent;
+/*		int ascent;
 		int descent;
 		int height;
 		XFontSet set;
-		XFontStruct *xfont;
+		XFontStruct *xfont;*/
+		XftFont *xftfont;
+		XGlyphInfo *extents;
+		int height;
+		int width;
 	} font;
 } DC; /* draw context */
 
@@ -363,10 +371,10 @@
 	lt = &foo;
 	while(stack)
 		unmanage(stack);
-	if(dc.font.set)
+	/*if(dc.font.set)
 		XFreeFontSet(dpy, dc.font.set);
 	else
-		XFreeFont(dpy, dc.font.xfont);
+		XFreeFont(dpy, dc.font.xfont);*/
 	XUngrabKey(dpy, AnyKey, AnyModifier, root);
 	XFreePixmap(dpy, dc.drawable);
 	XFreeGC(dpy, dc.gc);
@@ -522,8 +530,8 @@
 	if((dc.w = dc.x - x) > bh) {
 		dc.x = x;
 		if(c) {
-			drawtext(c->name, dc.sel, False);
-			drawsquare(c->isfixed, c->isfloating, False, dc.sel);
+			drawtext(c->name, dc.norm, False);
+			drawsquare(c->isfixed, c->isfloating, False, dc.norm);
 		}
 		else
 			drawtext(NULL, dc.norm, False);
@@ -540,7 +548,8 @@
 
 	gcv.foreground = col[invert ? ColBG : ColFG];
 	XChangeGC(dpy, dc.gc, GCForeground, &gcv);
-	x = (dc.font.ascent + dc.font.descent + 2) / 4;
+//	x = (dc.font.ascent + dc.font.descent + 2) / 4;
+	x = (dc.font.height + 2) / 4;
 	r.x = dc.x + 1;
 	r.y = dc.y + 1;
 	if(filled) {
@@ -566,20 +575,25 @@
 	olen = strlen(text);
 	len = MIN(olen, sizeof buf);
 	memcpy(buf, text, len);
-	h = dc.font.ascent + dc.font.descent;
+/* 	h = dc.font.ascent + dc.font.descent;
 	y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
-	x = dc.x + (h / 2);
+	x = dc.x + (h / 2);*/
+	h = dc.font.height;
+	y = bh/2 + h/2-3;
+	x = dc.x+h/2;
 	/* shorten text if necessary */
-	for(; len && (i = textnw(buf, len)) > dc.w - h; len--);
+//	for(; len && (i = textnw(buf, len)) > dc.w - h; len--);
+	for(; len && (i = textnw(buf, len)) > dc.w; len--);
 	if(!len)
 		return;
 	if(len < olen)
 		for(i = len; i && i > len - 3; buf[--i] = '.');
 	XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]);
-	if(dc.font.set)
+/*	if(dc.font.set)
 		XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
 	else
-		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
+		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);*/
+	XftDrawStringUtf8(dc.xftdrawable, (col==dc.norm) ? dc.xftnorm : dc.xftsel ,dc.font.xftfont,x,y,buf,len);
 }
 
 void
@@ -780,7 +794,7 @@
 initfont(const char *fontstr) {
 	char *def, **missing;
 	int i, n;
-
+/*
 	missing = NULL;
 	if(dc.font.set)
 		XFreeFontSet(dpy, dc.font.set);
@@ -813,7 +827,19 @@
 		dc.font.ascent = dc.font.xfont->ascent;
 		dc.font.descent = dc.font.xfont->descent;
 	}
-	dc.font.height = dc.font.ascent + dc.font.descent;
+	dc.font.height = dc.font.ascent + dc.font.descent;*/
+	dc.font.xftfont = XftFontOpenXlfd(dpy,screen,fontstr);
+	if(!dc.font.xftfont)
+		dc.font.xftfont = XftFontOpenName(dpy,screen,fontstr);
+	if(!dc.font.xftfont)
+		eprint("error, cannot load font: '%s'\n", fontstr);
+	dc.font.extents = malloc(sizeof(XGlyphInfo));
+	XftTextExtentsUtf8(dpy,dc.font.xftfont,fontstr, strlen(fontstr), dc.font.extents);
+	//dc.font.height = dc.font.extents->y+dc.font.extents->yOff;
+	//dc.font.height = dc.font.xftfont->ascent + dc.font.xftfont->descent;
+	dc.font.height = dc.font.xftfont->height;
+	dc.font.width = (dc.font.extents->width)/strlen(fontstr);
+	//dc.font.width = dc.font.xftfont->width;
 }
 
 Bool
@@ -1210,6 +1236,21 @@
 	uint len, offset;
 	XEvent ev;
 
+	/*my autorun*/
+        int fd[2];
+        pid_t childpid;
+        pipe(fd);
+        childpid = fork();
+        if(childpid == 0) {
+                close(1); //closing stdout
+                dup(fd[1]); //dup fd1 to stdout
+                setsid();
+                char *autorun[] = { "dwm_autorun", NULL};
+                execvp(autorun[0],autorun);
+        }
+        close(0); //closing stdin
+        dup(fd[0]); //dup fd0 to stdin
+
 	/* main event loop, also reads status text from stdin */
 	XSync(dpy, False);
 	xfd = ConnectionNumber(dpy);
@@ -1324,7 +1365,9 @@
 	sy = 0;
 	sw = DisplayWidth(dpy, screen);
 	sh = DisplayHeight(dpy, screen);
-	bh = dc.h = dc.font.height + 2;
+//	bh = dc.h = dc.font.height + 2;
+	//dc.h = bh = dc.font.extents->y+dc.font.extents->height - 5;
+	dc.h = bh = dc.font.extents->height + 2;
 	lt = layouts;
 	updategeom();
 
@@ -1348,11 +1391,21 @@
 	dc.sel[ColBorder] = getcolor(selbordercolor);
 	dc.sel[ColBG] = getcolor(selbgcolor);
 	dc.sel[ColFG] = getcolor(selfgcolor);
+	dc.xftsel=malloc(sizeof(XftColor));
+	dc.xftnorm=malloc(sizeof(XftColor));
+	XftColorAllocName(dpy,DefaultVisual(dpy,screen),DefaultColormap(dpy,screen),s
elfgcolor, dc.xftsel);
+	XftColorAllocName(dpy,DefaultVisual(dpy,screen),DefaultColormap(dpy,screen),n
ormfgcolor, dc.xftnorm);
+	if(!dc.xftnorm || !dc.xftnorm)
+		eprint("error, cannot allocate colors\n");
+		
 	dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(dpy, screen), bh, DefaultDepth(dpy, screen));
 	dc.gc = XCreateGC(dpy, root, 0, 0);
 	XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
-	if(!dc.font.set)
-		XSetFont(dpy, dc.gc, dc.font.xfont->fid);
+/*	if(!dc.font.set)
+		XSetFont(dpy, dc.gc, dc.font.xfont->fid);*/
+	dc.xftdrawable = XftDrawCreate(dpy, dc.drawable, DefaultVisual(dpy,screen),DefaultColormap(dpy,screen));
+	if(!dc.xftdrawable)
+		eprint("error, cannot create drawable\n");		 
 
 	/* init bar */
 	for(blw = i = 0; LENGTH(layouts) > 1 && i < LENGTH(layouts); i++) {
@@ -1415,13 +1468,17 @@
 
 int
 textnw(const char *text, uint len) {
-	XRectangle r;
+/*	XRectangle r;
 
 	if(dc.font.set) {
 		XmbTextExtents(dc.font.set, text, len, NULL, &r);
 		return r.width;
 	}
-	return XTextWidth(dc.font.xfont, text, len);
+	return XTextWidth(dc.font.xfont, text, len);*/
+	XftTextExtentsUtf8(dpy,dc.font.xftfont,text, strlen(text), dc.font.extents);
+	if(dc.font.extents->height > dc.font.height)
+		dc.font.height = dc.font.extents->height;
+	return dc.font.extents->width-15;
 }
 
 void


за качество просьба сильно не пинать, это все один большой грязный хак, многое пришлось поменять.
в частности геометрия панельки  рассчитывалась при Xft весь паршиво.не забудьте поправить config.mk на предмет Xft

z0D5e8n7x
() автор топика

Убери рамочки вокруг графиков в коньках.

ZZaiatSS ★★
()

Забавный скрин! Шрифты мне понравились очень в тему к обоине супер!

Давайте хохлому жестовские подносы тоже наверно класно будут!

Nikitost
()

В целом - рулез!

vdm ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.