diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/fe-gtk/Makefile.am | 8 | ||||
-rw-r--r-- | src/fe-gtk/fe-gtk.vcxproj | 1 | ||||
-rw-r--r-- | src/fe-gtk/fe-gtk.vcxproj.filters | 3 | ||||
-rw-r--r-- | src/fe-gtk/mmx_cmod.S | 530 | ||||
-rw-r--r-- | src/fe-gtk/mmx_cmod.h | 28 | ||||
-rw-r--r-- | src/fe-gtk/xtext.c | 449 | ||||
-rw-r--r-- | src/fe-gtk/xtext.h | 24 |
7 files changed, 17 insertions, 1026 deletions
diff --git a/src/fe-gtk/Makefile.am b/src/fe-gtk/Makefile.am index 24098ace..88e3dfea 100644 --- a/src/fe-gtk/Makefile.am +++ b/src/fe-gtk/Makefile.am @@ -9,14 +9,10 @@ hexchat_LDADD = ../common/libhexchatcommon.a $(GUI_LIBS) EXTRA_DIST = \ ascii.h banlist.h chanlist.h chanview.h chanview-tabs.c \ chanview-tree.c custom-list.h editlist.h fe-gtk.h fkeys.h gtkutil.h joind.h \ - maingui.h menu.h mmx_cmod.S mmx_cmod.h notifygui.h palette.h pixmaps.h \ + maingui.h menu.h notifygui.h palette.h pixmaps.h \ plugin-tray.h plugingui.c plugingui.h rawlog.h sexy-iso-codes.h \ sexy-spell-entry.h sexy-marshal.h textgui.h urlgrab.h userlistgui.h xtext.h -if USE_MMX -mmx_cmod_S = mmx_cmod.S -endif - if DO_PLUGIN plugingui_c = plugingui.c endif @@ -28,6 +24,6 @@ endif hexchat_SOURCES = ascii.c banlist.c chanlist.c chanview.c custom-list.c \ dccgui.c editlist.c fe-gtk.c fkeys.c gtkutil.c ignoregui.c joind.c menu.c \ - maingui.c $(mmx_cmod_S) notifygui.c palette.c pixmaps.c plugin-tray.c $(plugingui_c) \ + maingui.c notifygui.c palette.c pixmaps.c plugin-tray.c $(plugingui_c) \ rawlog.c servlistgui.c setup.c $(sexy_spell) textgui.c \ urlgrab.c userlistgui.c xtext.c diff --git a/src/fe-gtk/fe-gtk.vcxproj b/src/fe-gtk/fe-gtk.vcxproj index c8aa1550..a7c40a19 100644 --- a/src/fe-gtk/fe-gtk.vcxproj +++ b/src/fe-gtk/fe-gtk.vcxproj @@ -110,7 +110,6 @@ <ClInclude Include="joind.h" /> <ClInclude Include="maingui.h" /> <ClInclude Include="menu.h" /> - <ClInclude Include="mmx_cmod.h" /> <ClInclude Include="notifygui.h" /> <ClInclude Include="palette.h" /> <ClInclude Include="pixmaps.h" /> diff --git a/src/fe-gtk/fe-gtk.vcxproj.filters b/src/fe-gtk/fe-gtk.vcxproj.filters index 424f7564..e1de7844 100644 --- a/src/fe-gtk/fe-gtk.vcxproj.filters +++ b/src/fe-gtk/fe-gtk.vcxproj.filters @@ -51,9 +51,6 @@ <ClInclude Include="menu.h"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="mmx_cmod.h"> - <Filter>Header Files</Filter> - </ClInclude> <ClInclude Include="notifygui.h"> <Filter>Header Files</Filter> </ClInclude> diff --git a/src/fe-gtk/mmx_cmod.S b/src/fe-gtk/mmx_cmod.S deleted file mode 100644 index 12e866de..00000000 --- a/src/fe-gtk/mmx_cmod.S +++ /dev/null @@ -1,530 +0,0 @@ -/* - * Copyright (C) 1997-2001, Michael Jennings - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies of the Software, its documentation and marketing & publicity - * materials, and acknowledgment shall be given in the documentation, materials - * and software packages that this Software was used. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* MMX routines for tinting XImages written by Willem Monsuwe <willem@stack.nl> */ - -/* Function calling conventions: - * shade_ximage_xx(void *data, int bpl, int w, int h, int rm, int gm, int bm); - */ - -#define data 8(%ebp) -#define bpl 12(%ebp) -#define w 16(%ebp) -#define h 20(%ebp) -#define rm 24(%ebp) -#define gm 28(%ebp) -#define bm 32(%ebp) - -#ifdef UNDERSCORE_SYMBOLS /* need this to link with msvc */ -#define SHADE_XIMAGE_15 _shade_ximage_15_mmx -#define SHADE_XIMAGE_16 _shade_ximage_16_mmx -#define SHADE_XIMAGE_32 _shade_ximage_32_mmx -#define HAVE_MMX _have_mmx -#else -#define SHADE_XIMAGE_15 shade_ximage_15_mmx -#define SHADE_XIMAGE_16 shade_ximage_16_mmx -#define SHADE_XIMAGE_32 shade_ximage_32_mmx -#define HAVE_MMX have_mmx -#endif - -.globl SHADE_XIMAGE_15 -.globl SHADE_XIMAGE_16 -.globl SHADE_XIMAGE_32 -.globl HAVE_MMX - -.bss -.text -.align 8 - -#define ENTER \ - pushl %ebp ;\ - movl %esp, %ebp ;\ - pushl %ebx ;\ - pushl %ecx ;\ - pushl %edx ;\ - pushl %edi ;\ - pushl %esi ;\ - movl data, %esi ;\ - movl w, %ebx ;\ - movl h, %edx - -#define LEAVE \ -4: ;\ - emms ;\ - popl %esi ;\ - popl %edi ;\ - popl %edx ;\ - popl %ecx ;\ - popl %ebx ;\ - movl %ebp, %esp ;\ - popl %ebp ;\ - ret - - -SHADE_XIMAGE_15: - ENTER - - leal -6(%esi, %ebx, 2), %esi - negl %ebx - jz 5f - - /* Setup multipliers */ - movd rm, %mm5 - movd gm, %mm6 - movd bm, %mm7 - punpcklwd %mm5, %mm5 /* 00 00 00 00 rm rm rm rm */ - punpcklwd %mm6, %mm6 /* 00 00 00 00 gm gm gm gm */ - punpcklwd %mm7, %mm7 /* 00 00 00 00 bm bm bm bm */ - punpckldq %mm5, %mm5 /* rm rm rm rm rm rm rm rm */ - punpckldq %mm6, %mm6 /* gm gm gm gm gm gm gm gm */ - punpckldq %mm7, %mm7 /* bm bm bm bm bm bm bm bm */ - - cmpl $256, rm - jg shade_ximage_15_mmx_saturate - cmpl $256, gm - jg shade_ximage_15_mmx_saturate - cmpl $256, bm - jg shade_ximage_15_mmx_saturate - -1: movl %ebx, %ecx - addl $3, %ecx - jns 3f -2: - movq (%esi, %ecx, 2), %mm0 - - movq %mm0, %mm1 /* rg gb */ - movq %mm0, %mm2 /* rg gb */ - psrlw $5, %mm1 /* 0r rg */ - psrlw $10, %mm0 /* 00 0r */ - psllw $11, %mm2 /* b0 00 */ - psllw $11, %mm1 /* g0 00 */ - psllw $8, %mm0 /* 0r 00 */ - psrlw $3, %mm1 /* 0g 00 */ - psrlw $3, %mm2 /* 0b 00 */ - - pmulhw %mm5, %mm0 /* 00 0r */ - pmulhw %mm6, %mm1 /* 00 0g */ - pmulhw %mm7, %mm2 /* 00 0b */ - - psllw $10, %mm0 /* r0 00 */ - psllw $5, %mm1 /* 0g g0 */ - por %mm2, %mm0 /* r0 0b */ - por %mm1, %mm0 /* rg gb */ - - movq %mm0, (%esi, %ecx, 2) - - addl $4, %ecx - js 2b - jmp 4f -3: - movw (%esi, %ecx, 2), %ax - movd %eax, %mm0 - - movq %mm0, %mm1 /* rg gb */ - movq %mm0, %mm2 /* rg gb */ - psrlw $5, %mm1 /* 0r rg */ - psrlw $10, %mm0 /* 00 0r */ - psllw $11, %mm2 /* b0 00 */ - psllw $11, %mm1 /* g0 00 */ - psllw $8, %mm0 /* 0r 00 */ - psrlw $3, %mm1 /* 0g 00 */ - psrlw $3, %mm2 /* 0b 00 */ - - pmulhw %mm5, %mm0 /* 00 0r */ - pmulhw %mm6, %mm1 /* 00 0g */ - pmulhw %mm7, %mm2 /* 00 0b */ - - psllw $10, %mm0 /* r0 00 */ - psllw $5, %mm1 /* 0g g0 */ - por %mm2, %mm0 /* r0 0b */ - por %mm1, %mm0 /* rg gb */ - - movd %mm0, %eax - movw %ax, (%esi, %ecx, 2) - - incl %ecx -4: - cmpl $2, %ecx - jng 3b - - addl bpl, %esi - decl %edx - jnz 1b -5: - LEAVE - - -shade_ximage_15_mmx_saturate: - - pcmpeqw %mm3, %mm3 - psllw $5, %mm3 /* ff e0 ff e0 ff e0 ff e0 */ - -1: movl %ebx, %ecx - addl $3, %ecx - jns 3f -2: - movq (%esi, %ecx, 2), %mm0 - - movq %mm0, %mm1 /* rg gb */ - movq %mm0, %mm2 /* rg gb */ - psrlw $5, %mm1 /* 0r rg */ - psrlw $10, %mm0 /* 00 0r */ - psllw $11, %mm2 /* b0 00 */ - psllw $11, %mm1 /* g0 00 */ - psllw $8, %mm0 /* 0r 00 */ - psrlw $3, %mm1 /* 0g 00 */ - psrlw $3, %mm2 /* 0b 00 */ - - pmulhw %mm5, %mm0 /* xx xr */ - pmulhw %mm6, %mm1 /* xx xg */ - pmulhw %mm7, %mm2 /* xx xb */ - - /* Saturate upper */ - paddusw %mm3, %mm0 /* ff er */ - paddusw %mm3, %mm1 /* ff eg */ - paddusw %mm3, %mm2 /* ff eb */ - - psubw %mm3, %mm0 /* 00 0r */ - psubw %mm3, %mm1 /* 00 0g */ - psubw %mm3, %mm2 /* 00 0b */ - - psllw $10, %mm0 /* r0 00 */ - psllw $5, %mm1 /* 0g g0 */ - por %mm2, %mm0 /* r0 0b */ - por %mm1, %mm0 /* rg gb */ - - movq %mm0, (%esi, %ecx, 2) - - addl $4, %ecx - js 2b - jmp 4f -3: - movw (%esi, %ecx, 2), %ax - movd %eax, %mm0 - - movq %mm0, %mm1 /* rg gb */ - movq %mm0, %mm2 /* rg gb */ - psrlw $5, %mm1 /* 0r rg */ - psrlw $10, %mm0 /* 00 0r */ - psllw $11, %mm2 /* b0 00 */ - psllw $11, %mm1 /* g0 00 */ - psllw $8, %mm0 /* 0r 00 */ - psrlw $3, %mm1 /* 0g 00 */ - psrlw $3, %mm2 /* 0b 00 */ - - pmulhw %mm5, %mm0 /* xx xr */ - pmulhw %mm6, %mm1 /* xx xg */ - pmulhw %mm7, %mm2 /* xx xb */ - - /* Saturate upper */ - paddusw %mm3, %mm0 /* ff er */ - paddusw %mm3, %mm1 /* ff eg */ - paddusw %mm3, %mm2 /* ff eb */ - - psubw %mm3, %mm0 /* 00 0r */ - psubw %mm3, %mm1 /* 00 0g */ - psubw %mm3, %mm2 /* 00 0b */ - - psllw $10, %mm0 /* r0 00 */ - psllw $5, %mm1 /* 0g g0 */ - por %mm2, %mm0 /* r0 0b */ - por %mm1, %mm0 /* rg gb */ - - movd %mm0, %eax - movw %ax, (%esi, %ecx, 2) - - incl %ecx -4: - cmpl $2, %ecx - jng 3b - - addl bpl, %esi - decl %edx - jnz 1b -5: - LEAVE - - -SHADE_XIMAGE_16: - ENTER - - leal -6(%esi, %ebx, 2), %esi - negl %ebx - jz 5f - - /* Setup multipliers */ - movd rm, %mm5 - movd gm, %mm6 - movd bm, %mm7 - punpcklwd %mm5, %mm5 /* 00 00 00 00 rm rm rm rm */ - punpcklwd %mm6, %mm6 /* 00 00 00 00 gm gm gm gm */ - punpcklwd %mm7, %mm7 /* 00 00 00 00 bm bm bm bm */ - punpckldq %mm5, %mm5 /* rm rm rm rm rm rm rm rm */ - punpckldq %mm6, %mm6 /* gm gm gm gm gm gm gm gm */ - punpckldq %mm7, %mm7 /* bm bm bm bm bm bm bm bm */ - - cmpl $256, rm - jg shade_ximage_16_mmx_saturate - cmpl $256, gm - jg shade_ximage_16_mmx_saturate - cmpl $256, bm - jg shade_ximage_16_mmx_saturate - -1: movl %ebx, %ecx - addl $3, %ecx - jns 3f -2: - movq (%esi, %ecx, 2), %mm0 - - movq %mm0, %mm1 /* rg gb */ - movq %mm0, %mm2 /* rg gb */ - psrlw $5, %mm1 /* 0r rg */ - psrlw $11, %mm0 /* 00 0r */ - psllw $11, %mm2 /* b0 00 */ - psllw $10, %mm1 /* g0 00 */ - psllw $8, %mm0 /* 0r 00 */ - psrlw $2, %mm1 /* 0g 00 */ - psrlw $3, %mm2 /* 0b 00 */ - - pmulhw %mm5, %mm0 /* 00 0r */ - pmulhw %mm6, %mm1 /* 00 0g */ - pmulhw %mm7, %mm2 /* 00 0b */ - - psllw $11, %mm0 /* r0 00 */ - psllw $5, %mm1 /* 0g g0 */ - por %mm2, %mm0 /* r0 0b */ - por %mm1, %mm0 /* rg gb */ - - movq %mm0, (%esi, %ecx, 2) - - addl $4, %ecx - js 2b - jmp 4f -3: - movw (%esi, %ecx, 2), %ax - movd %eax, %mm0 - - movq %mm0, %mm1 /* rg gb */ - movq %mm0, %mm2 /* rg gb */ - psrlw $5, %mm1 /* 0r rg */ - psrlw $11, %mm0 /* 00 0r */ - psllw $11, %mm2 /* b0 00 */ - psllw $10, %mm1 /* g0 00 */ - psllw $8, %mm0 /* 0r 00 */ - psrlw $2, %mm1 /* 0g 00 */ - psrlw $3, %mm2 /* 0b 00 */ - - pmulhw %mm5, %mm0 /* 00 0r */ - pmulhw %mm6, %mm1 /* 00 0g */ - pmulhw %mm7, %mm2 /* 00 0b */ - - psllw $11, %mm0 /* r0 00 */ - psllw $5, %mm1 /* 0g g0 */ - por %mm2, %mm0 /* r0 0b */ - por %mm1, %mm0 /* rg gb */ - - movd %mm0, %eax - movw %ax, (%esi, %ecx, 2) - - incl %ecx -4: - cmpl $2, %ecx - jng 3b - - addl bpl, %esi - decl %edx - jnz 1b -5: - LEAVE - - -shade_ximage_16_mmx_saturate: - - pcmpeqw %mm3, %mm3 - movq %mm3, %mm4 - psllw $5, %mm3 /* ff e0 ff e0 ff e0 ff e0 */ - psllw $6, %mm4 /* ff c0 ff c0 ff c0 ff c0 */ - -1: movl %ebx, %ecx - addl $3, %ecx - jns 3f -2: - movq (%esi, %ecx, 2), %mm0 - - movq %mm0, %mm1 /* rg gb */ - movq %mm0, %mm2 /* rg gb */ - psrlw $5, %mm1 /* 0r rg */ - psrlw $11, %mm0 /* 00 0r */ - psllw $11, %mm2 /* b0 00 */ - psllw $10, %mm1 /* g0 00 */ - psllw $8, %mm0 /* 0r 00 */ - psrlw $2, %mm1 /* 0g 00 */ - psrlw $3, %mm2 /* 0b 00 */ - - pmulhw %mm5, %mm0 /* xx xr */ - pmulhw %mm6, %mm1 /* xx xg */ - pmulhw %mm7, %mm2 /* xx xb */ - - /* Saturate upper */ - paddusw %mm3, %mm0 /* ff er */ - paddusw %mm4, %mm1 /* ff cg */ - paddusw %mm3, %mm2 /* ff eb */ - - psubw %mm4, %mm1 /* 00 0g */ - psubw %mm3, %mm2 /* 00 0b */ - - psllw $11, %mm0 /* r0 00 */ - psllw $5, %mm1 /* 0g g0 */ - por %mm2, %mm0 /* r0 0b */ - por %mm1, %mm0 /* rg gb */ - - movq %mm0, (%esi, %ecx, 2) - - addl $4, %ecx - js 2b - jmp 4f -3: - movw (%esi, %ecx, 2), %ax - movd %eax, %mm0 - - movq %mm0, %mm1 /* rg gb */ - movq %mm0, %mm2 /* rg gb */ - psrlw $5, %mm1 /* 0r rg */ - psrlw $11, %mm0 /* 00 0r */ - psllw $11, %mm2 /* b0 00 */ - psllw $10, %mm1 /* g0 00 */ - psllw $8, %mm0 /* 0r 00 */ - psrlw $2, %mm1 /* 0g 00 */ - psrlw $3, %mm2 /* 0b 00 */ - - pmulhw %mm5, %mm0 /* xx xr */ - pmulhw %mm6, %mm1 /* xx xg */ - pmulhw %mm7, %mm2 /* xx xb */ - - /* Saturate upper */ - paddusw %mm3, %mm0 /* ff er */ - paddusw %mm4, %mm1 /* ff cg */ - paddusw %mm3, %mm2 /* ff eb */ - - psubw %mm4, %mm1 /* 00 0g */ - psubw %mm3, %mm2 /* 00 0b */ - - psllw $11, %mm0 /* r0 00 */ - psllw $5, %mm1 /* 0g g0 */ - por %mm2, %mm0 /* r0 0b */ - por %mm1, %mm0 /* rg gb */ - - movd %mm0, %eax - movw %ax, (%esi, %ecx, 2) - - incl %ecx -4: - cmpl $2, %ecx - jng 3b - - addl bpl, %esi - decl %edx - jnz 1b -5: - LEAVE - - -SHADE_XIMAGE_32: - ENTER - - leal (%esi, %ebx, 4), %esi - negl %ebx - jz 3f - - movd rm, %mm4 - movd gm, %mm5 - movd bm, %mm6 - psllq $32, %mm4 - psllq $16, %mm5 - por %mm6, %mm4 - por %mm5, %mm4 - - pcmpeqw %mm6, %mm6 - psllw $15, %mm6 /* 80 00 80 00 80 00 80 00 */ - movq %mm6, %mm5 - pmulhw %mm4, %mm5 /* Get correction factor */ -1: - movl %ebx, %ecx -2: - movd (%esi, %ecx, 4), %mm1 /* 00 rr gg bb */ - pxor %mm0, %mm0 - punpcklbw %mm1, %mm0 /* 00 00 rr 00 gg 00 bb 00 */ - pxor %mm6, %mm0 /* Flip sign */ - - pmulhw %mm4, %mm0 /* 00 00 xx rr xx gg xx bb */ - psubw %mm5, %mm0 /* Correct range */ - packuswb %mm0, %mm0 /* 00 rr gg bb 00 rr gg bb */ - - movd %mm0, (%esi, %ecx, 4) - - incl %ecx - jnz 2b - - addl bpl, %esi - decl %edx - jnz 1b -3: - LEAVE - - -HAVE_MMX: - push %ebx -/* Check if bit 21 in flags word is writeable */ - pushfl - popl %eax - movl %eax,%ebx - xorl $0x00200000, %eax - pushl %eax - popfl - pushfl - popl %eax - - cmpl %eax, %ebx - je 8f - -/* OK, we have CPUID */ - - movl $1, %eax - cpuid - - test $0x00800000, %edx - jz 8f - - movl $1, %eax /* success, have mmx */ - popl %ebx - ret - -8: - xorl %eax,%eax /* failed, no mmx */ - popl %ebx - ret - -#if defined(__GNUC__) && !defined(_WIN32) -.section .note.GNU-stack, "", @progbits -.previous -#endif diff --git a/src/fe-gtk/mmx_cmod.h b/src/fe-gtk/mmx_cmod.h deleted file mode 100644 index 5b84a4b8..00000000 --- a/src/fe-gtk/mmx_cmod.h +++ /dev/null @@ -1,28 +0,0 @@ -/* HexChat - * Copyright (C) 1998-2010 Peter Zelezny. - * Copyright (C) 2009-2013 Berke Viktor. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifndef HEXCHAT_MMX_CMOD_H -#define HEXCHAT_MMX_CMOD_H - -void shade_ximage_15_mmx(void *data, int bpl, int w, int h, int rm, int gm, int bm); -void shade_ximage_16_mmx(void *data, int bpl, int w, int h, int rm, int gm, int bm); -void shade_ximage_32_mmx(void *data, int bpl, int w, int h, int rm, int gm, int bm); -int have_mmx (void); - -#endif diff --git a/src/fe-gtk/xtext.c b/src/fe-gtk/xtext.c index 44ac9cc5..9d04d2b0 100644 --- a/src/fe-gtk/xtext.c +++ b/src/fe-gtk/xtext.c @@ -43,25 +43,11 @@ #include <stdlib.h> #include <time.h> -#ifdef HEXCHAT #ifdef WIN32 #include "../../config-win32.h" #else #include "../../config.h" /* can define USE_XLIB here */ #endif -#else -#define USE_XLIB -#endif - -#ifdef USE_XLIB -#include <gdk/gdkx.h> -#include <X11/Xlib.h> -#include <X11/Xatom.h> -#endif - -#ifdef USE_MMX -#include "mmx_cmod.h" -#endif #include "../common/hexchat.h" #include "../common/fe.h" @@ -256,216 +242,6 @@ xtext_draw_bg (GtkXText *xtext, int x, int y, int width, int height) #endif -/* ========================================= */ -/* ========== XFT 1 and 2 BACKEND ========== */ -/* ========================================= */ - -#ifdef USE_XFT - -static void -backend_font_close (GtkXText *xtext) -{ - XftFontClose (GDK_WINDOW_XDISPLAY (xtext->draw_buf), xtext->font); -#ifdef ITALIC - XftFontClose (GDK_WINDOW_XDISPLAY (xtext->draw_buf), xtext->ifont); -#endif -} - -static void -backend_init (GtkXText *xtext) -{ - if (xtext->xftdraw == NULL) - { - xtext->xftdraw = XftDrawCreate ( - GDK_WINDOW_XDISPLAY (xtext->draw_buf), - GDK_WINDOW_XWINDOW (xtext->draw_buf), - GDK_VISUAL_XVISUAL (gdk_drawable_get_visual (xtext->draw_buf)), - GDK_COLORMAP_XCOLORMAP (gdk_drawable_get_colormap (xtext->draw_buf))); - XftDrawSetSubwindowMode (xtext->xftdraw, IncludeInferiors); - } -} - -static void -backend_deinit (GtkXText *xtext) -{ - if (xtext->xftdraw) - { - XftDrawDestroy (xtext->xftdraw); - xtext->xftdraw = NULL; - } -} - -static XftFont * -backend_font_open_real (Display *xdisplay, char *name, gboolean italics) -{ - XftFont *font = NULL; - PangoFontDescription *fontd; - int weight, slant, screen = DefaultScreen (xdisplay); - - fontd = pango_font_description_from_string (name); - - if (pango_font_description_get_size (fontd) != 0) - { - weight = pango_font_description_get_weight (fontd); - /* from pangoft2-fontmap.c */ - if (weight < (PANGO_WEIGHT_NORMAL + PANGO_WEIGHT_LIGHT) / 2) - weight = XFT_WEIGHT_LIGHT; - else if (weight < (PANGO_WEIGHT_NORMAL + 600) / 2) - weight = XFT_WEIGHT_MEDIUM; - else if (weight < (600 + PANGO_WEIGHT_BOLD) / 2) - weight = XFT_WEIGHT_DEMIBOLD; - else if (weight < (PANGO_WEIGHT_BOLD + PANGO_WEIGHT_ULTRABOLD) / 2) - weight = XFT_WEIGHT_BOLD; - else - weight = XFT_WEIGHT_BLACK; - - slant = pango_font_description_get_style (fontd); - if (slant == PANGO_STYLE_ITALIC) - slant = XFT_SLANT_ITALIC; - else if (slant == PANGO_STYLE_OBLIQUE) - slant = XFT_SLANT_OBLIQUE; - else - slant = XFT_SLANT_ROMAN; - - font = XftFontOpen (xdisplay, screen, - XFT_FAMILY, XftTypeString, pango_font_description_get_family (fontd), - XFT_CORE, XftTypeBool, False, - XFT_SIZE, XftTypeDouble, (double)pango_font_description_get_size (fontd)/PANGO_SCALE, - XFT_WEIGHT, XftTypeInteger, weight, - XFT_SLANT, XftTypeInteger, italics ? XFT_SLANT_ITALIC : slant, - NULL); - } - pango_font_description_free (fontd); - - if (font == NULL) - { - font = XftFontOpenName (xdisplay, screen, name); - if (font == NULL) - font = XftFontOpenName (xdisplay, screen, "sans-11"); - } - - return font; -} - -static void -backend_font_open (GtkXText *xtext, char *name) -{ - Display *dis = GDK_WINDOW_XDISPLAY (xtext->draw_buf); - - xtext->font = backend_font_open_real (dis, name, FALSE); -#ifdef ITALIC - xtext->ifont = backend_font_open_real (dis, name, TRUE); -#endif -} - -inline static int -backend_get_char_width (GtkXText *xtext, unsigned char *str, int *mbl_ret) -{ - XGlyphInfo ext; - - if (*str < 128) - { - *mbl_ret = 1; - return xtext->fontwidth[*str]; - } - - *mbl_ret = charlen (str); - XftTextExtentsUtf8 (GDK_WINDOW_XDISPLAY (xtext->draw_buf), xtext->font, str, *mbl_ret, &ext); - - return ext.xOff; -} - -static int -backend_get_text_width (GtkXText *xtext, guchar *str, int len, int is_mb) -{ - XGlyphInfo ext; - - if (!is_mb) - return gtk_xtext_text_width_8bit (xtext, str, len); - - XftTextExtentsUtf8 (GDK_WINDOW_XDISPLAY (xtext->draw_buf), xtext->font, str, len, &ext); - return ext.xOff; -} - -static void -backend_draw_text (GtkXText *xtext, int dofill, GdkGC *gc, int x, int y, - char *str, int len, int str_width, int is_mb) -{ - /*Display *xdisplay = GDK_WINDOW_XDISPLAY (xtext->draw_buf);*/ - void (*draw_func) (XftDraw *, XftColor *, XftFont *, int, int, XftChar8 *, int) = (void *)XftDrawString8; - XftFont *font; - - /* if all ascii, use String8 to avoid the conversion penalty */ - if (is_mb) - draw_func = (void *)XftDrawStringUtf8; - - if (dofill) - { -/* register GC xgc = GDK_GC_XGC (gc); - XSetForeground (xdisplay, xgc, xtext->xft_bg->pixel); - XFillRectangle (xdisplay, GDK_WINDOW_XWINDOW (xtext->draw_buf), xgc, x, - y - xtext->font->ascent, str_width, xtext->fontsize);*/ - XftDrawRect (xtext->xftdraw, xtext->xft_bg, x, - y - xtext->font->ascent, str_width, xtext->fontsize); - } - - font = xtext->font; -#ifdef ITALIC - if (xtext->italics) - font = xtext->ifont; -#endif - - draw_func (xtext->xftdraw, xtext->xft_fg, font, x, y, str, len); - - if (xtext->overdraw) - draw_func (xtext->xftdraw, xtext->xft_fg, font, x, y, str, len); - - if (xtext->bold) - draw_func (xtext->xftdraw, xtext->xft_fg, font, x + 1, y, str, len); -} - -/*static void -backend_set_clip (GtkXText *xtext, GdkRectangle *area) -{ - gdk_gc_set_clip_rectangle (xtext->fgc, area); - gdk_gc_set_clip_rectangle (xtext->bgc, area); -} - -static void -backend_clear_clip (GtkXText *xtext) -{ - gdk_gc_set_clip_rectangle (xtext->fgc, NULL); - gdk_gc_set_clip_rectangle (xtext->bgc, NULL); -}*/ - -/*static void -backend_set_clip (GtkXText *xtext, GdkRectangle *area) -{ - Region reg; - XRectangle rect; - - rect.x = area->x; - rect.y = area->y; - rect.width = area->width; - rect.height = area->height; - - reg = XCreateRegion (); - XUnionRectWithRegion (&rect, reg, reg); - XftDrawSetClip (xtext->xftdraw, reg); - XDestroyRegion (reg); - - gdk_gc_set_clip_rectangle (xtext->fgc, area); -} - -static void -backend_clear_clip (GtkXText *xtext) -{ - XftDrawSetClip (xtext->xftdraw, NULL); - gdk_gc_set_clip_rectangle (xtext->fgc, NULL); -} -*/ -#else /* !USE_XFT */ - /* ======================================= */ /* ============ PANGO BACKEND ============ */ /* ======================================= */ @@ -675,7 +451,6 @@ backend_clear_clip (GtkXText *xtext) gdk_gc_set_clip_rectangle (xtext->bgc, NULL); }*/ -#endif /* !USE_PANGO */ static void xtext_set_fg (GtkXText *xtext, GdkGC *gc, int index) @@ -684,21 +459,8 @@ xtext_set_fg (GtkXText *xtext, GdkGC *gc, int index) col.pixel = xtext->palette[index]; gdk_gc_set_foreground (gc, &col); - -#ifdef USE_XFT - if (gc == xtext->fgc) - xtext->xft_fg = &xtext->color[index]; - else - xtext->xft_bg = &xtext->color[index]; -#endif } -#ifdef USE_XFT - -#define xtext_set_bg(xt,gc,index) xt->xft_bg = &xt->color[index] - -#else - static void xtext_set_bg (GtkXText *xtext, GdkGC *gc, int index) { @@ -727,11 +489,7 @@ gtk_xtext_init (GtkXText * xtext) xtext->italics = FALSE; xtext->hidden = FALSE; xtext->font = NULL; -#ifdef USE_XFT - xtext->xftdraw = NULL; -#else xtext->layout = NULL; -#endif xtext->jump_out_offset = 0; xtext->jump_in_offset = 0; xtext->ts_x = 0; @@ -1353,24 +1111,6 @@ gtk_xtext_draw_marker (GtkXText * xtext, textentry * ent, int y) } } -#ifdef USE_SHM -static int -have_shm_pixmaps(Display *dpy) -{ - int major, minor; - static int checked = 0; - static int have = FALSE; - - if (!checked) - { - XShmQueryVersion (dpy, &major, &minor, &have); - checked = 1; - } - - return have; -} -#endif - static void gtk_xtext_paint (GtkWidget *widget, GdkRectangle *area) { @@ -1388,11 +1128,7 @@ gtk_xtext_paint (GtkWidget *widget, GdkRectangle *area) xtext->last_win_x = x; xtext->last_win_y = y; #ifndef WIN32 -#ifdef USE_SHM - if (xtext->shaded && !have_shm_pixmaps(GDK_WINDOW_XDISPLAY (xtext->draw_buf))) -#else if (xtext->shaded) -#endif { xtext->recycle = TRUE; gtk_xtext_load_trans (xtext); @@ -2931,9 +2667,6 @@ gtk_xtext_render_flush (GtkXText * xtext, int x, int y, unsigned char *str, pix = gdk_pixmap_new (xtext->draw_buf, str_width, xtext->fontsize, xtext->depth); if (pix) { -#ifdef USE_XFT - XftDrawChange (xtext->xftdraw, GDK_WINDOW_XWINDOW (pix)); -#endif dest_x = x; dest_y = y - xtext->font->ascent; @@ -2967,13 +2700,6 @@ gtk_xtext_render_flush (GtkXText * xtext, int x, int y, unsigned char *str, gdk_gc_set_ts_origin (xtext->bgc, xtext->ts_x, xtext->ts_y); xtext->draw_buf = GTK_WIDGET (xtext)->window; -#ifdef USE_XFT - XftDrawChange (xtext->xftdraw, GDK_WINDOW_XWINDOW (xtext->draw_buf)); -#endif -#if 0 - gdk_draw_drawable (xtext->draw_buf, xtext->bgc, pix, 0, 0, dest_x, - dest_y, str_width, xtext->fontsize); -#else clip.x = xtext->clip_x; clip.y = xtext->clip_y; clip.width = xtext->clip_x2 - xtext->clip_x; @@ -2996,18 +2722,10 @@ gtk_xtext_render_flush (GtkXText * xtext, int x, int y, unsigned char *str, if (xtext->underline) { -#ifdef USE_XFT - GdkColor col; -#endif - #ifndef COLOR_HILIGHT dounder: #endif -#ifdef USE_XFT - col.pixel = xtext->xft_fg->pixel; - gdk_gc_set_foreground (gc, &col); -#endif if (pix) y = dest_y + xtext->font->ascent + 1; else @@ -3732,120 +3450,27 @@ static void shade_image (GdkVisual *visual, void *data, int bpl, int bpp, int w, int h, int rm, int gm, int bm, int bg, int depth) { -#ifdef USE_MMX - int bg_r, bg_g, bg_b; - - bg_r = bg & visual->red_mask; - bg_g = bg & visual->green_mask; - bg_b = bg & visual->blue_mask; - - /* the MMX routines are about 50% faster at 16-bit. */ - /* only use MMX routines with a pure black background */ - if (bg_r == 0 && bg_g == 0 && bg_b == 0 && have_mmx ()) /* do a runtime check too! */ - { - switch (depth) - { - case 15: - shade_ximage_15_mmx (data, bpl, w, h, rm, gm, bm); - break; - case 16: - shade_ximage_16_mmx (data, bpl, w, h, rm, gm, bm); - break; - case 24: - if (bpp != 32) - goto generic; - case 32: - shade_ximage_32_mmx (data, bpl, w, h, rm, gm, bm); - break; - default: - goto generic; - } - } else + switch (depth) { -generic: -#endif - switch (depth) + case 15: + shade_ximage_15 (data, bpl, w, h, rm, gm, bm, bg); + break; + case 16: + shade_ximage_16 (data, bpl, w, h, rm, gm, bm, bg); + break; + case 24: + if (bpp != 32) { - case 15: - shade_ximage_15 (data, bpl, w, h, rm, gm, bm, bg); - break; - case 16: - shade_ximage_16 (data, bpl, w, h, rm, gm, bm, bg); + shade_ximage_24 (data, bpl, w, h, rm, gm, bm, bg); break; - case 24: - if (bpp != 32) - { - shade_ximage_24 (data, bpl, w, h, rm, gm, bm, bg); - break; - } - case 32: - shade_ximage_32 (data, bpl, w, h, rm, gm, bm, bg); } -#ifdef USE_MMX + case 32: + shade_ximage_32 (data, bpl, w, h, rm, gm, bm, bg); } -#endif } #ifdef USE_XLIB -#ifdef USE_SHM - -static XImage * -get_shm_image (Display *xdisplay, XShmSegmentInfo *shminfo, int x, int y, - int w, int h, int depth, Pixmap pix) -{ - XImage *ximg; - - shminfo->shmid = -1; - shminfo->shmaddr = (char*) -1; - ximg = XShmCreateImage (xdisplay, 0, depth, ZPixmap, 0, shminfo, w, h); - if (!ximg) - return NULL; - - shminfo->shmid = shmget (IPC_PRIVATE, ximg->bytes_per_line * ximg->height, - IPC_CREAT|0600); - if (shminfo->shmid == -1) - { - XDestroyImage (ximg); - return NULL; - } - - shminfo->readOnly = False; - ximg->data = shminfo->shmaddr = (char *)shmat (shminfo->shmid, 0, 0); - if (shminfo->shmaddr == ((char *)-1)) - { - shmctl (shminfo->shmid, IPC_RMID, 0); - XDestroyImage (ximg); - return NULL; - } - - XShmAttach (xdisplay, shminfo); - XSync (xdisplay, False); - shmctl (shminfo->shmid, IPC_RMID, 0); - XShmGetImage (xdisplay, pix, ximg, x, y, AllPlanes); - - return ximg; -} - -static XImage * -get_image (GtkXText *xtext, Display *xdisplay, XShmSegmentInfo *shminfo, - int x, int y, int w, int h, int depth, Pixmap pix) -{ - XImage *ximg; - - xtext->shm = 1; - ximg = get_shm_image (xdisplay, shminfo, x, y, w, h, depth, pix); - if (!ximg) - { - xtext->shm = 0; - ximg = XGetImage (xdisplay, pix, x, y, w, h, -1, ZPixmap); - } - - return ximg; -} - -#endif - static GdkPixmap * shade_pixmap (GtkXText * xtext, Pixmap p, int x, int y, int w, int h) { @@ -3857,12 +3482,6 @@ shade_pixmap (GtkXText * xtext, Pixmap p, int x, int y, int w, int h) XGCValues gcv; GC tgc; Display *xdisplay = GDK_WINDOW_XDISPLAY (xtext->draw_buf); - -#ifdef USE_SHM - int shm_pixmaps; - shm_pixmaps = have_shm_pixmaps(xdisplay); -#endif - XGetGeometry (xdisplay, p, &root, &dummy, &dummy, &width, &height, &dummy, &depth); @@ -3879,21 +3498,11 @@ shade_pixmap (GtkXText * xtext, Pixmap p, int x, int y, int w, int h) XFillRectangle (xdisplay, tmp, tgc, 0, 0, w, h); XFreeGC (xdisplay, tgc); -#ifdef USE_SHM - if (shm_pixmaps) - ximg = get_image (xtext, xdisplay, &xtext->shminfo, 0, 0, w, h, depth, tmp); - else -#endif - ximg = XGetImage (xdisplay, tmp, 0, 0, w, h, -1, ZPixmap); + ximg = XGetImage (xdisplay, tmp, 0, 0, w, h, -1, ZPixmap); XFreePixmap (xdisplay, tmp); } else { -#ifdef USE_SHM - if (shm_pixmaps) - ximg = get_image (xtext, xdisplay, &xtext->shminfo, x, y, w, h, depth, p); - else -#endif - ximg = XGetImage (xdisplay, p, x, y, w, h, -1, ZPixmap); + ximg = XGetImage (xdisplay, p, x, y, w, h, -1, ZPixmap); } if (!ximg) @@ -3917,23 +3526,12 @@ shade_pixmap (GtkXText * xtext, Pixmap p, int x, int y, int w, int h) shaded_pix = xtext->pixmap; else { -#ifdef USE_SHM - if (xtext->shm && shm_pixmaps) - { - shaded_pix = gdk_pixmap_foreign_new_for_display ( - gdk_drawable_get_display (xtext->draw_buf), - XShmCreatePixmap (xdisplay, p, ximg->data, &xtext->shminfo, w, h, depth)); - } else -#endif { shaded_pix = gdk_pixmap_new (GTK_WIDGET (xtext)->window, w, h, depth); } } -#ifdef USE_SHM - if (!xtext->shm || !shm_pixmaps) -#endif - XPutImage (xdisplay, GDK_WINDOW_XWINDOW (shaded_pix), + XPutImage (xdisplay, GDK_WINDOW_XWINDOW (shaded_pix), GDK_GC_XGC (xtext->fgc), ximg, 0, 0, 0, 0, w, h); XDestroyImage (ximg); @@ -3950,18 +3548,8 @@ gtk_xtext_free_trans (GtkXText * xtext) { if (xtext->pixmap) { -#ifdef USE_SHM - if (xtext->shm && have_shm_pixmaps(GDK_WINDOW_XDISPLAY (xtext->draw_buf))) - { - XFreePixmap (GDK_WINDOW_XDISPLAY (xtext->pixmap), - GDK_WINDOW_XWINDOW (xtext->pixmap)); - XShmDetach (GDK_WINDOW_XDISPLAY (xtext->draw_buf), &xtext->shminfo); - shmdt (xtext->shminfo.shmaddr); - } -#endif g_object_unref (xtext->pixmap); xtext->pixmap = NULL; - xtext->shm = 0; } } @@ -4468,13 +4056,6 @@ gtk_xtext_set_palette (GtkXText * xtext, GdkColor palette[]) for (i = (XTEXT_COLS-1); i >= 0; i--) { -#ifdef USE_XFT - xtext->color[i].color.red = palette[i].red; - xtext->color[i].color.green = palette[i].green; - xtext->color[i].color.blue = palette[i].blue; - xtext->color[i].color.alpha = 0xffff; - xtext->color[i].pixel = palette[i].pixel; -#endif xtext->palette[i] = palette[i].pixel; } diff --git a/src/fe-gtk/xtext.h b/src/fe-gtk/xtext.h index 32e26af6..a6027398 100644 --- a/src/fe-gtk/xtext.h +++ b/src/fe-gtk/xtext.h @@ -21,16 +21,6 @@ #define HEXCHAT_XTEXT_H #include <gtk/gtk.h> -#ifdef USE_XFT -#include <X11/Xft/Xft.h> -#endif - -#ifdef USE_SHM -#include <X11/Xlib.h> -#include <sys/ipc.h> -#include <sys/shm.h> -#include <X11/extensions/XShm.h> -#endif #define GTK_TYPE_XTEXT (gtk_xtext_get_type ()) #define GTK_XTEXT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GTK_TYPE_XTEXT, GtkXText)) @@ -132,10 +122,6 @@ struct _GtkXText xtext_buffer *orig_buffer; xtext_buffer *selection_buffer; -#ifdef USE_SHM - XShmSegmentInfo shminfo; -#endif - GtkAdjustment *adj; GdkPixmap *pixmap; /* 0 = use palette[19] */ GdkDrawable *draw_buf; /* points to ->window */ @@ -188,14 +174,6 @@ struct _GtkXText guint16 fontwidth[128]; /* each char's width, only the ASCII ones */ -#ifdef USE_XFT - XftColor color[XTEXT_COLS]; - XftColor *xft_fg; - XftColor *xft_bg; /* both point into color[20] */ - XftDraw *xftdraw; - XftFont *font; - XftFont *ifont; /* italics */ -#else struct pangofont { PangoFontDescription *font; @@ -204,7 +182,6 @@ struct _GtkXText int descent; } *font, pango_font; PangoLayout *layout; -#endif int fontsize; int space_width; /* width (pixels) of the space " " character */ @@ -258,7 +235,6 @@ struct _GtkXText unsigned int recycle:1; unsigned int avoid_trans:1; unsigned int force_render:1; - unsigned int shm:1; unsigned int color_paste:1; /* CTRL was pressed when selection finished */ /* settings/prefs */ |