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 *view, *xtext;
|
||||
GtkListStore *store;
|
||||
XTextColor xtext_palette[XTEXT_COLS];
|
||||
char buf[128];
|
||||
|
||||
if (key_dialog)
|
||||
@@ -816,7 +817,8 @@ key_dialog_show ()
|
||||
NULL, 600, 360, &vbox, 0);
|
||||
|
||||
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_xtext_set_font (GTK_XTEXT (xtext), prefs.hex_text_font);
|
||||
|
||||
|
||||
@@ -2405,8 +2405,10 @@ mg_update_xtext (GtkWidget *wid)
|
||||
{
|
||||
GtkXText *xtext = GTK_XTEXT (wid);
|
||||
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_background (xtext, channelwin_pix);
|
||||
gtk_xtext_set_wordwrap (xtext, prefs.hex_text_wordwrap);
|
||||
@@ -2431,6 +2433,7 @@ mg_create_textarea (session *sess, GtkWidget *box)
|
||||
{
|
||||
GtkWidget *inbox, *vbox, *frame;
|
||||
GtkXText *xtext;
|
||||
XTextColor xtext_palette[XTEXT_COLS];
|
||||
session_gui *gui = sess->gui;
|
||||
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_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);
|
||||
gtk_xtext_set_max_indent (xtext, prefs.hex_text_max_indent);
|
||||
gtk_xtext_set_thin_separator (xtext, prefs.hex_text_thin_sep);
|
||||
|
||||
@@ -38,6 +38,18 @@
|
||||
#include "../common/cfgfiles.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[] = {
|
||||
/* colors for xtext */
|
||||
@@ -143,6 +155,18 @@ static const GdkColor dark_colors[MAX_COL + 1] = {
|
||||
{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
|
||||
palette_user_set_color (int idx, const GdkColor *col)
|
||||
{
|
||||
@@ -399,4 +423,3 @@ palette_apply_dark_mode (gboolean enable)
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,10 @@
|
||||
#ifndef HEXCHAT_PALETTE_H
|
||||
#define HEXCHAT_PALETTE_H
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include "xtext-color.h"
|
||||
|
||||
extern GdkColor colors[];
|
||||
|
||||
#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);
|
||||
|
||||
void palette_get_xtext_colors (XTextColor *palette, size_t palette_len);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -101,6 +101,7 @@ void
|
||||
open_rawlog (struct server *serv)
|
||||
{
|
||||
GtkWidget *bbox, *scrolledwindow, *vbox;
|
||||
XTextColor xtext_palette[XTEXT_COLS];
|
||||
char tbuf[256];
|
||||
|
||||
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_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_xtext_set_font (GTK_XTEXT (serv->gui->rawlog_textlist), prefs.hex_text_font);
|
||||
GTK_XTEXT (serv->gui->rawlog_textlist)->ignore_hidden = 1;
|
||||
|
||||
@@ -438,6 +438,7 @@ void
|
||||
pevent_dialog_show ()
|
||||
{
|
||||
GtkWidget *vbox, *hbox, *wid, *pane;
|
||||
XTextColor xtext_palette[XTEXT_COLS];
|
||||
|
||||
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_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_size_request (pevent_dialog_twid, -1, 75);
|
||||
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 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
|
||||
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 *
|
||||
gtk_xtext_new (GdkColor palette[], int separator)
|
||||
gtk_xtext_new (const XTextColor *palette, int separator)
|
||||
{
|
||||
GtkXText *xtext;
|
||||
|
||||
@@ -3472,13 +3459,13 @@ gtk_xtext_render_line (GtkXText * xtext, textentry * ent, int line,
|
||||
}
|
||||
|
||||
void
|
||||
gtk_xtext_set_palette (GtkXText * xtext, GdkColor palette[])
|
||||
gtk_xtext_set_palette (GtkXText * xtext, const XTextColor *palette)
|
||||
{
|
||||
int 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)))
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <cairo.h>
|
||||
#include "xtext-color.h"
|
||||
|
||||
#define GTK_TYPE_XTEXT (gtk_xtext_get_type ())
|
||||
#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 textentry textentry;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
double red;
|
||||
double green;
|
||||
double blue;
|
||||
double alpha;
|
||||
} XTextColor;
|
||||
|
||||
/*
|
||||
* offsets_t is used for retaining search information.
|
||||
* 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);
|
||||
};
|
||||
|
||||
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_indent (xtext_buffer *buf,
|
||||
unsigned char *left_text, int left_len,
|
||||
@@ -270,7 +263,7 @@ void gtk_xtext_append_indent (xtext_buffer *buf,
|
||||
time_t stamp);
|
||||
int gtk_xtext_set_font (GtkXText *xtext, char *name);
|
||||
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_save (GtkXText * xtext, int fh);
|
||||
void gtk_xtext_refresh (GtkXText * xtext);
|
||||
|
||||
Reference in New Issue
Block a user