mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-03-10 07:50:19 +00:00
- Added a shared XTextColor definition and a palette conversion helper for Cairo-ready colors, decoupling renderer palettes from GdkColor usage in the API surface.
- Updated xtext palette APIs to accept internal color arrays directly for rendering setup. - Wired xtext palette creation through UI entry points to use the new palette helper when constructing or refreshing text views.
This commit is contained in:
@@ -803,6 +803,7 @@ key_dialog_show ()
|
|||||||
GtkWidget *vbox, *box;
|
GtkWidget *vbox, *box;
|
||||||
GtkWidget *view, *xtext;
|
GtkWidget *view, *xtext;
|
||||||
GtkListStore *store;
|
GtkListStore *store;
|
||||||
|
XTextColor xtext_palette[XTEXT_COLS];
|
||||||
char buf[128];
|
char buf[128];
|
||||||
|
|
||||||
if (key_dialog)
|
if (key_dialog)
|
||||||
@@ -816,7 +817,8 @@ key_dialog_show ()
|
|||||||
NULL, 600, 360, &vbox, 0);
|
NULL, 600, 360, &vbox, 0);
|
||||||
|
|
||||||
view = key_dialog_treeview_new (vbox);
|
view = key_dialog_treeview_new (vbox);
|
||||||
xtext = gtk_xtext_new (colors, 0);
|
palette_get_xtext_colors (xtext_palette, XTEXT_COLS);
|
||||||
|
xtext = gtk_xtext_new (xtext_palette, 0);
|
||||||
gtk_box_pack_start (GTK_BOX (vbox), xtext, FALSE, TRUE, 2);
|
gtk_box_pack_start (GTK_BOX (vbox), xtext, FALSE, TRUE, 2);
|
||||||
gtk_xtext_set_font (GTK_XTEXT (xtext), prefs.hex_text_font);
|
gtk_xtext_set_font (GTK_XTEXT (xtext), prefs.hex_text_font);
|
||||||
|
|
||||||
|
|||||||
@@ -2405,8 +2405,10 @@ mg_update_xtext (GtkWidget *wid)
|
|||||||
{
|
{
|
||||||
GtkXText *xtext = GTK_XTEXT (wid);
|
GtkXText *xtext = GTK_XTEXT (wid);
|
||||||
const gchar *font_name;
|
const gchar *font_name;
|
||||||
|
XTextColor xtext_palette[XTEXT_COLS];
|
||||||
|
|
||||||
gtk_xtext_set_palette (xtext, colors);
|
palette_get_xtext_colors (xtext_palette, XTEXT_COLS);
|
||||||
|
gtk_xtext_set_palette (xtext, xtext_palette);
|
||||||
gtk_xtext_set_max_lines (xtext, prefs.hex_text_max_lines);
|
gtk_xtext_set_max_lines (xtext, prefs.hex_text_max_lines);
|
||||||
gtk_xtext_set_background (xtext, channelwin_pix);
|
gtk_xtext_set_background (xtext, channelwin_pix);
|
||||||
gtk_xtext_set_wordwrap (xtext, prefs.hex_text_wordwrap);
|
gtk_xtext_set_wordwrap (xtext, prefs.hex_text_wordwrap);
|
||||||
@@ -2431,6 +2433,7 @@ mg_create_textarea (session *sess, GtkWidget *box)
|
|||||||
{
|
{
|
||||||
GtkWidget *inbox, *vbox, *frame;
|
GtkWidget *inbox, *vbox, *frame;
|
||||||
GtkXText *xtext;
|
GtkXText *xtext;
|
||||||
|
XTextColor xtext_palette[XTEXT_COLS];
|
||||||
session_gui *gui = sess->gui;
|
session_gui *gui = sess->gui;
|
||||||
static const GtkTargetEntry dnd_targets[] =
|
static const GtkTargetEntry dnd_targets[] =
|
||||||
{
|
{
|
||||||
@@ -2451,7 +2454,8 @@ mg_create_textarea (session *sess, GtkWidget *box)
|
|||||||
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
|
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
|
||||||
gtk_container_add (GTK_CONTAINER (inbox), frame);
|
gtk_container_add (GTK_CONTAINER (inbox), frame);
|
||||||
|
|
||||||
gui->xtext = gtk_xtext_new (colors, TRUE);
|
palette_get_xtext_colors (xtext_palette, XTEXT_COLS);
|
||||||
|
gui->xtext = gtk_xtext_new (xtext_palette, TRUE);
|
||||||
xtext = GTK_XTEXT (gui->xtext);
|
xtext = GTK_XTEXT (gui->xtext);
|
||||||
gtk_xtext_set_max_indent (xtext, prefs.hex_text_max_indent);
|
gtk_xtext_set_max_indent (xtext, prefs.hex_text_max_indent);
|
||||||
gtk_xtext_set_thin_separator (xtext, prefs.hex_text_thin_sep);
|
gtk_xtext_set_thin_separator (xtext, prefs.hex_text_thin_sep);
|
||||||
|
|||||||
@@ -38,6 +38,18 @@
|
|||||||
#include "../common/cfgfiles.h"
|
#include "../common/cfgfiles.h"
|
||||||
#include "../common/typedef.h"
|
#include "../common/typedef.h"
|
||||||
|
|
||||||
|
static XTextColor
|
||||||
|
palette_color_from_gdk (const GdkColor *color)
|
||||||
|
{
|
||||||
|
XTextColor result;
|
||||||
|
|
||||||
|
result.red = color->red / 65535.0;
|
||||||
|
result.green = color->green / 65535.0;
|
||||||
|
result.blue = color->blue / 65535.0;
|
||||||
|
result.alpha = 1.0;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
GdkColor colors[] = {
|
GdkColor colors[] = {
|
||||||
/* colors for xtext */
|
/* colors for xtext */
|
||||||
@@ -143,6 +155,18 @@ static const GdkColor dark_colors[MAX_COL + 1] = {
|
|||||||
{0, 0xf4f4, 0x4747, 0x4747}, /* 41 COL_SPELL (spellcheck underline) */
|
{0, 0xf4f4, 0x4747, 0x4747}, /* 41 COL_SPELL (spellcheck underline) */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
palette_get_xtext_colors (XTextColor *palette, size_t palette_len)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
size_t count = palette_len < G_N_ELEMENTS (colors) ? palette_len : G_N_ELEMENTS (colors);
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
palette[i] = palette_color_from_gdk (&colors[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
palette_user_set_color (int idx, const GdkColor *col)
|
palette_user_set_color (int idx, const GdkColor *col)
|
||||||
{
|
{
|
||||||
@@ -399,4 +423,3 @@ palette_apply_dark_mode (gboolean enable)
|
|||||||
|
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,10 @@
|
|||||||
#ifndef HEXCHAT_PALETTE_H
|
#ifndef HEXCHAT_PALETTE_H
|
||||||
#define HEXCHAT_PALETTE_H
|
#define HEXCHAT_PALETTE_H
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#include "xtext-color.h"
|
||||||
|
|
||||||
extern GdkColor colors[];
|
extern GdkColor colors[];
|
||||||
|
|
||||||
#define COL_MARK_FG 32
|
#define COL_MARK_FG 32
|
||||||
@@ -59,4 +63,6 @@ void palette_dark_set_color (int idx, const GdkColor *col);
|
|||||||
*/
|
*/
|
||||||
gboolean palette_apply_dark_mode (gboolean enable);
|
gboolean palette_apply_dark_mode (gboolean enable);
|
||||||
|
|
||||||
|
void palette_get_xtext_colors (XTextColor *palette, size_t palette_len);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -101,6 +101,7 @@ void
|
|||||||
open_rawlog (struct server *serv)
|
open_rawlog (struct server *serv)
|
||||||
{
|
{
|
||||||
GtkWidget *bbox, *scrolledwindow, *vbox;
|
GtkWidget *bbox, *scrolledwindow, *vbox;
|
||||||
|
XTextColor xtext_palette[XTEXT_COLS];
|
||||||
char tbuf[256];
|
char tbuf[256];
|
||||||
|
|
||||||
if (serv->gui->rawlog_window)
|
if (serv->gui->rawlog_window)
|
||||||
@@ -120,7 +121,8 @@ open_rawlog (struct server *serv)
|
|||||||
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_SHADOW_IN);
|
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_SHADOW_IN);
|
||||||
gtk_container_add (GTK_CONTAINER (vbox), scrolledwindow);
|
gtk_container_add (GTK_CONTAINER (vbox), scrolledwindow);
|
||||||
|
|
||||||
serv->gui->rawlog_textlist = gtk_xtext_new (colors, 0);
|
palette_get_xtext_colors (xtext_palette, XTEXT_COLS);
|
||||||
|
serv->gui->rawlog_textlist = gtk_xtext_new (xtext_palette, 0);
|
||||||
gtk_container_add (GTK_CONTAINER (scrolledwindow), serv->gui->rawlog_textlist);
|
gtk_container_add (GTK_CONTAINER (scrolledwindow), serv->gui->rawlog_textlist);
|
||||||
gtk_xtext_set_font (GTK_XTEXT (serv->gui->rawlog_textlist), prefs.hex_text_font);
|
gtk_xtext_set_font (GTK_XTEXT (serv->gui->rawlog_textlist), prefs.hex_text_font);
|
||||||
GTK_XTEXT (serv->gui->rawlog_textlist)->ignore_hidden = 1;
|
GTK_XTEXT (serv->gui->rawlog_textlist)->ignore_hidden = 1;
|
||||||
|
|||||||
@@ -438,6 +438,7 @@ void
|
|||||||
pevent_dialog_show ()
|
pevent_dialog_show ()
|
||||||
{
|
{
|
||||||
GtkWidget *vbox, *hbox, *wid, *pane;
|
GtkWidget *vbox, *hbox, *wid, *pane;
|
||||||
|
XTextColor xtext_palette[XTEXT_COLS];
|
||||||
|
|
||||||
if (pevent_dialog)
|
if (pevent_dialog)
|
||||||
{
|
{
|
||||||
@@ -462,7 +463,8 @@ pevent_dialog_show ()
|
|||||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (wid), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (wid), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
|
||||||
gtk_box_pack_start (GTK_BOX (vbox), wid, FALSE, TRUE, 0);
|
gtk_box_pack_start (GTK_BOX (vbox), wid, FALSE, TRUE, 0);
|
||||||
|
|
||||||
pevent_dialog_twid = gtk_xtext_new (colors, 0);
|
palette_get_xtext_colors (xtext_palette, XTEXT_COLS);
|
||||||
|
pevent_dialog_twid = gtk_xtext_new (xtext_palette, 0);
|
||||||
gtk_widget_set_sensitive (pevent_dialog_twid, FALSE);
|
gtk_widget_set_sensitive (pevent_dialog_twid, FALSE);
|
||||||
gtk_widget_set_size_request (pevent_dialog_twid, -1, 75);
|
gtk_widget_set_size_request (pevent_dialog_twid, -1, 75);
|
||||||
gtk_container_add (GTK_CONTAINER (wid), pevent_dialog_twid);
|
gtk_container_add (GTK_CONTAINER (wid), pevent_dialog_twid);
|
||||||
|
|||||||
20
src/fe-gtk/xtext-color.h
Normal file
20
src/fe-gtk/xtext-color.h
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
/* ZoiteChat
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef HEXCHAT_XTEXT_COLOR_H
|
||||||
|
#define HEXCHAT_XTEXT_COLOR_H
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double red;
|
||||||
|
double green;
|
||||||
|
double blue;
|
||||||
|
double alpha;
|
||||||
|
} XTextColor;
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -150,19 +150,6 @@ static void gtk_xtext_search_fini (xtext_buffer *);
|
|||||||
static gboolean gtk_xtext_search_init (xtext_buffer *buf, const gchar *text, gtk_xtext_search_flags flags, GError **perr);
|
static gboolean gtk_xtext_search_init (xtext_buffer *buf, const gchar *text, gtk_xtext_search_flags flags, GError **perr);
|
||||||
static char * gtk_xtext_get_word (GtkXText * xtext, int x, int y, textentry ** ret_ent, int *ret_off, int *ret_len, GSList **slp);
|
static char * gtk_xtext_get_word (GtkXText * xtext, int x, int y, textentry ** ret_ent, int *ret_off, int *ret_len, GSList **slp);
|
||||||
|
|
||||||
static inline XTextColor
|
|
||||||
xtext_color_from_gdk (const GdkColor *color)
|
|
||||||
{
|
|
||||||
XTextColor result;
|
|
||||||
|
|
||||||
result.red = color->red / 65535.0;
|
|
||||||
result.green = color->green / 65535.0;
|
|
||||||
result.blue = color->blue / 65535.0;
|
|
||||||
result.alpha = 1.0;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
xtext_set_source_color (cairo_t *cr, const XTextColor *color, gdouble alpha)
|
xtext_set_source_color (cairo_t *cr, const XTextColor *color, gdouble alpha)
|
||||||
{
|
{
|
||||||
@@ -619,7 +606,7 @@ gtk_xtext_adjustment_changed (GtkAdjustment * adj, GtkXText * xtext)
|
|||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
gtk_xtext_new (GdkColor palette[], int separator)
|
gtk_xtext_new (const XTextColor *palette, int separator)
|
||||||
{
|
{
|
||||||
GtkXText *xtext;
|
GtkXText *xtext;
|
||||||
|
|
||||||
@@ -3472,13 +3459,13 @@ gtk_xtext_render_line (GtkXText * xtext, textentry * ent, int line,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gtk_xtext_set_palette (GtkXText * xtext, GdkColor palette[])
|
gtk_xtext_set_palette (GtkXText * xtext, const XTextColor *palette)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = (XTEXT_COLS-1); i >= 0; i--)
|
for (i = (XTEXT_COLS-1); i >= 0; i--)
|
||||||
{
|
{
|
||||||
xtext->palette[i] = xtext_color_from_gdk (&palette[i]);
|
xtext->palette[i] = palette[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gtk_widget_get_realized (GTK_WIDGET(xtext)))
|
if (gtk_widget_get_realized (GTK_WIDGET(xtext)))
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <cairo.h>
|
#include <cairo.h>
|
||||||
|
#include "xtext-color.h"
|
||||||
|
|
||||||
#define GTK_TYPE_XTEXT (gtk_xtext_get_type ())
|
#define GTK_TYPE_XTEXT (gtk_xtext_get_type ())
|
||||||
#define GTK_XTEXT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GTK_TYPE_XTEXT, GtkXText))
|
#define GTK_XTEXT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GTK_TYPE_XTEXT, GtkXText))
|
||||||
@@ -56,14 +57,6 @@ typedef struct _GtkXText GtkXText;
|
|||||||
typedef struct _GtkXTextClass GtkXTextClass;
|
typedef struct _GtkXTextClass GtkXTextClass;
|
||||||
typedef struct textentry textentry;
|
typedef struct textentry textentry;
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
double red;
|
|
||||||
double green;
|
|
||||||
double blue;
|
|
||||||
double alpha;
|
|
||||||
} XTextColor;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* offsets_t is used for retaining search information.
|
* offsets_t is used for retaining search information.
|
||||||
* It is stored in the 'data' member of a GList,
|
* It is stored in the 'data' member of a GList,
|
||||||
@@ -262,7 +255,7 @@ struct _GtkXTextClass
|
|||||||
void (*set_scroll_adjustments) (GtkXText *xtext, GtkAdjustment *hadj, GtkAdjustment *vadj);
|
void (*set_scroll_adjustments) (GtkXText *xtext, GtkAdjustment *hadj, GtkAdjustment *vadj);
|
||||||
};
|
};
|
||||||
|
|
||||||
GtkWidget *gtk_xtext_new (GdkColor palette[], int separator);
|
GtkWidget *gtk_xtext_new (const XTextColor *palette, int separator);
|
||||||
void gtk_xtext_append (xtext_buffer *buf, unsigned char *text, int len, time_t stamp);
|
void gtk_xtext_append (xtext_buffer *buf, unsigned char *text, int len, time_t stamp);
|
||||||
void gtk_xtext_append_indent (xtext_buffer *buf,
|
void gtk_xtext_append_indent (xtext_buffer *buf,
|
||||||
unsigned char *left_text, int left_len,
|
unsigned char *left_text, int left_len,
|
||||||
@@ -270,7 +263,7 @@ void gtk_xtext_append_indent (xtext_buffer *buf,
|
|||||||
time_t stamp);
|
time_t stamp);
|
||||||
int gtk_xtext_set_font (GtkXText *xtext, char *name);
|
int gtk_xtext_set_font (GtkXText *xtext, char *name);
|
||||||
void gtk_xtext_set_background (GtkXText * xtext, cairo_surface_t *surface);
|
void gtk_xtext_set_background (GtkXText * xtext, cairo_surface_t *surface);
|
||||||
void gtk_xtext_set_palette (GtkXText * xtext, GdkColor palette[]);
|
void gtk_xtext_set_palette (GtkXText * xtext, const XTextColor *palette);
|
||||||
void gtk_xtext_clear (xtext_buffer *buf, int lines);
|
void gtk_xtext_clear (xtext_buffer *buf, int lines);
|
||||||
void gtk_xtext_save (GtkXText * xtext, int fh);
|
void gtk_xtext_save (GtkXText * xtext, int fh);
|
||||||
void gtk_xtext_refresh (GtkXText * xtext);
|
void gtk_xtext_refresh (GtkXText * xtext);
|
||||||
|
|||||||
Reference in New Issue
Block a user