From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: "Elijah G." Newsgroups: gmane.emacs.devel Subject: Re: Stipples support in MS-Windows port Date: Sun, 19 May 2024 16:37:07 -0600 Message-ID: <86zfslctt8.fsf@gmail.com> References: <87a5l49a53.fsf@yahoo.com> <87seyw7udp.fsf@yahoo.com> <87wmo0zzni.fsf@yahoo.com> <86r0e83gez.fsf@gnu.org> <861q661vgf.fsf@gmail.com> <86le4dvxx9.fsf@gmail.com> <87frulynby.fsf@yahoo.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="24690"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: emacs-devel@gnu.org To: Po Lu , Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Mon May 20 00:40:03 2024 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1s8pCD-0006CO-Us for ged-emacs-devel@m.gmane-mx.org; Mon, 20 May 2024 00:40:02 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s8pBN-0004cQ-VL; Sun, 19 May 2024 18:39:10 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s8pBM-0004cE-NP for emacs-devel@gnu.org; Sun, 19 May 2024 18:39:08 -0400 Original-Received: from mail-ot1-x342.google.com ([2607:f8b0:4864:20::342]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1s8pBK-0005da-Vv; Sun, 19 May 2024 18:39:08 -0400 Original-Received: by mail-ot1-x342.google.com with SMTP id 46e09a7af769-6f0f5633a45so926694a34.3; Sun, 19 May 2024 15:39:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1716158344; x=1716763144; darn=gnu.org; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=e1FWJC6ij5uLfkJkLrygy0wBQVV9+prjdOQurKfEUfw=; b=llsa4hOjdW3SO0aeT0REn0UnCvzN9wYh8EqnZLqZuymapIP41KWzz07qxS6xAzsoZW 5DQbANtXf3WuOb5mp0Xytwmytt10LtaY2+z1Pqe+NR2LTrDLgYK01d1U+7zMk1wI5dIP qfrcwYCY2axW0R3Jyzka9v5ZmVYA/rDY3ccadPD6g9wdEJEOcRLhnRR5y1HWVeNAfdv6 RtgFbZ6E4Q2U62CIg+B955fUoZ1sUS086OyILIoVRC4hQGohqCQ7bFcrnwTQt4jY1aYH N8BjdfLF1hV1TWLfb045E4jkYtsANF771iy9EN10W9WagVqLfnGC7L6oS8dgPeWHQ/Ba JmmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716158344; x=1716763144; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=e1FWJC6ij5uLfkJkLrygy0wBQVV9+prjdOQurKfEUfw=; b=R6vQNHGtIzjlh5DGc48/XDBaQ71dcL2pnXfoNiOY0zaHvjosHPTssGxKlNfjx3jLW6 b9FNf5cWKNvcgiTHmHd97v0JDszKkyhliLF6ctWZ64tzuvq0OJLO8qy0Xif7JwnSfrXq ELL0F+lRVed6IGdli1C5XYTqkm6wc/DInMvacndcjIXBr+8PGeOSLK4msiDwSViqju1d MZ5Q2gLL+QIFb+mVCdDCj2c2Vmso/fYJGB9x9EVAtW0sdJyMHc+2cAmbAHsxSMILo2Et XrKb4yM2DS8/sfO2dgeOaIUIXp/IKaQWjmPmTWriAJ3tuwkQQGO3X8WG0BVdCzRtdX7g 8PdA== X-Forwarded-Encrypted: i=1; AJvYcCXTxi/ZvMOtBjdUmxQyNIfBj9pmo/IKsmUMCi97yTFdeS9GODG75H25/IdcQBN21YCbS9u7R0bW9igjp4M= X-Gm-Message-State: AOJu0Yy1e/DAJT2H8s0iuk93giCsiq10u+kKYMxZ8GgThvdEVfXbFbPt dRyuwySmIK0Hxa10UhDIRwnLghrkaLszendOuj/gdeCFp2dsb2mqULjvurwj X-Google-Smtp-Source: AGHT+IGIoj7cls3ljKeIOx3fHvlYdnDWrg87yrnSYrv9bDy3dfojPjGLBe1X2gg+g7MBoYM66Oo18Q== X-Received: by 2002:a05:6870:418b:b0:245:40dd:8292 with SMTP id 586e51a60fabf-24540ddaa58mr11939229fac.33.1716158344201; Sun, 19 May 2024 15:39:04 -0700 (PDT) Original-Received: from LIBERO ([187.184.24.187]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-6f12d33c3aasm1445125a34.60.2024.05.19.15.38.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 May 2024 15:39:03 -0700 (PDT) In-Reply-To: <87frulynby.fsf@yahoo.com> (Po Lu's message of "Tue, 14 May 2024 13:28:01 +0800") Received-SPF: pass client-ip=2607:f8b0:4864:20::342; envelope-from=eg642616@gmail.com; helo=mail-ot1-x342.google.com X-Spam_score_int: 1 X-Spam_score: 0.1 X-Spam_bar: / X-Spam_report: (0.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, PDS_OTHER_BAD_TLD=1.999, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:319383 Archived-At: --=-=-= Content-Type: text/plain Good news, the stipple implementation is now done, now works using indent-bars package and other stipples, however there are some issues that i want to remark 1. Currently it only works for stipple data and not for X Bitmap files, I don't know where is stored the code for using X Bitmap in stipples. 2. I had to use `w32_create_pixmap_from_bitmap_data` for make it usable, but it is defined before `image_create_bitmap_from_data`, i had to copy its code for use it, Is there a problem move that function before `image_create_bitmap_from_data` ? 3. The bitmap created using the copied code have colors inverted, I fixed it setting text color to background color and bg to fg color, I'm not sure how w32_create_pixmap_from_bitmap_data works, as far as i could see it does some operations to the memory, something that i don't think i can help so much. After fixing 1 (and maybe 2), I will only need to format the code (and maybe rename XFillRectangle function) for send the final patch here. I'm attaching the work done if you all want to test it. Thanks. --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=stipple.png Content-Transfer-Encoding: base64 Content-Description: Test using indent-bars package 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 --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-WIP-Stipple-implementation-for-MS-Windows.patch >From f5dd217c5d7ae9d2aae9c18247d5d954fa170bf6 Mon Sep 17 00:00:00 2001 From: "Elias G. Perez" Date: Fri, 10 May 2024 20:36:42 -0600 Subject: [PATCH] [WIP] Stipple implementation for MS Windows --- src/image.c | 32 +++++++++++++++++++++++++++++++- src/w32term.c | 38 ++++++++++++++++++++++++++++++++------ src/w32term.h | 1 + 3 files changed, 64 insertions(+), 7 deletions(-) diff --git a/src/image.c b/src/image.c index e93fc3183af..95da8353787 100644 --- a/src/image.c +++ b/src/image.c @@ -602,7 +602,36 @@ image_create_bitmap_from_data (struct frame *f, char *bits, FRAME_DISPLAY_INFO (XFRAME (frame))->n_planes, FRAME_DISPLAY_INFO (XFRAME (frame))->n_cbits, bits); - if (! bitmap) + Emacs_Pixmap stipple; + + /* code extracted from `w32_create_pixmap_from_bitmap_data` */ + + static unsigned char swap_nibble[16] + = { 0x0, 0x8, 0x4, 0xc, /* 0000 1000 0100 1100 */ + 0x2, 0xa, 0x6, 0xe, /* 0010 1010 0110 1110 */ + 0x1, 0x9, 0x5, 0xd, /* 0001 1001 0101 1101 */ + 0x3, 0xb, 0x7, 0xf }; /* 0011 1011 0111 1111 */ + int i, j, w1, w2; + unsigned char *data, *p; + + w1 = (width + 7) / 8; /* nb of 8bits elt in X bitmap */ + w2 = ((width + 15) / 16) * 2; /* nb of 16bits elt in W32 bitmap */ + data = alloca (height * w2); + memset (data, 0, height * w2); + for (i = 0; i < height; i++) + { + p = data + i*w2; + for (j = 0; j < w1; j++) + { + /* Bitswap XBM bytes to match how Windows does things. */ + unsigned char c = *bits++; + *p++ = (unsigned char)((swap_nibble[c & 0xf] << 4) + | (swap_nibble[(c>>4) & 0xf])); + } + } + stipple = CreateBitmap (width, height, 1, 1, (char *) data); + + if (!bitmap || !stipple) return -1; #endif /* HAVE_NTGUI */ @@ -681,6 +710,7 @@ image_create_bitmap_from_data (struct frame *f, char *bits, #ifdef HAVE_NTGUI dpyinfo->bitmaps[id - 1].pixmap = bitmap; + dpyinfo->bitmaps[id - 1].stipple = stipple; dpyinfo->bitmaps[id - 1].hinst = NULL; dpyinfo->bitmaps[id - 1].depth = 1; #endif /* HAVE_NTGUI */ diff --git a/src/w32term.c b/src/w32term.c index a9aff304771..c72870e0b67 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -1248,6 +1248,33 @@ w32_clear_glyph_string_rect (struct glyph_string *s, real_w, real_h); } +/* Fill background with bitmap S glyph, with GC, X, Y, WIDTH, HEIGHT, HDC. */ +static void +XFillRectangle (HDC hdc, struct glyph_string *s, Emacs_GC *gc, + int x, int y, unsigned int width, unsigned int height) +{ + /* NOTE: stipple bitmap has the inverted colors, inverting those 2 + * functions color must fix this. */ + SetTextColor (hdc, gc->background); + SetBkColor (hdc, gc->foreground); + + Emacs_Pixmap bm; + HBRUSH hb; + + bm = FRAME_DISPLAY_INFO (s->f)->bitmaps[s->face->stipple - 1].stipple; + hb = CreatePatternBrush (bm); + + /* Is this part below written correctly? */ + RECT r; + r.left = x; + r.top = y; + r.right = x + width + 1; + r.bottom = y + height + 1; + + FillRect (hdc, &r, hb); + + DeleteObject (hb); +} /* Draw the background of glyph_string S. If S->background_filled_p is non-zero don't draw it. FORCE_P non-zero means draw the @@ -1264,16 +1291,15 @@ w32_draw_glyph_string_background (struct glyph_string *s, bool force_p) { int box_line_width = max (s->face->box_horizontal_line_width, 0); -#if 0 /* TODO: stipple */ +#if 1 /* TODO: stipple */ if (s->stippled_p) { /* Fill background with a stipple pattern. */ - XSetFillStyle (s->display, s->gc, FillOpaqueStippled); - XFillRectangle (s->display, FRAME_W32_WINDOW (s->f), s->gc, s->x, - s->y + box_line_width, - s->background_width, + /* XSetFillStyle (s->display, s->gc, FillOpaqueStippled); */ + XFillRectangle (s->hdc, s, s->gc, s->x, + s->y + box_line_width, s->background_width, s->height - 2 * box_line_width); - XSetFillStyle (s->display, s->gc, FillSolid); + /* XSetFillStyle (s->display, s->gc, FillSolid); */ s->background_filled_p = true; } else diff --git a/src/w32term.h b/src/w32term.h index 3120c8bd71f..1eb6a660248 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -58,6 +58,7 @@ #define CP_DEFAULT 1004 { Emacs_Pixmap pixmap; char *file; + Emacs_Pixmap stipple; HINSTANCE hinst; /* Used to load the file */ int refcount; /* Record some info about this pixmap. */ -- 2.44.0.windows.1 --=-=-=--