This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository legacy-imlib2.

View the commit online.

commit 431f45fe0496ec34c71a87a56b904ee356b468f5
Author: Kim Woelders <k...@woelders.dk>
AuthorDate: Sat Jul 23 10:18:33 2022 +0200

    api: Move text functions to separate file
---
 src/lib/Makefile.am |   1 +
 src/lib/api.c       | 490 ---------------------------------------------------
 src/lib/api.h       |   2 +
 src/lib/api_text.c  | 498 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 501 insertions(+), 490 deletions(-)

diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 9136d28..4723b19 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -16,6 +16,7 @@ libImlib2_la_LIBADD  =
 libImlib2_la_SOURCES = \
 api.c 		api.h		\
 api_obsolete.c	\
+api_text.c	\
 asm.h \
 asm_c.c		asm_c.h		\
 blend.c		blend.h		\
diff --git a/src/lib/api.c b/src/lib/api.c
index 9e6f8a6..cf74876 100644
--- a/src/lib/api.c
+++ b/src/lib/api.c
@@ -13,8 +13,6 @@
 #include "blend.h"
 #include "colormod.h"
 #include "color_helpers.h"
-#include "file.h"
-#include "font.h"
 #include "grad.h"
 #include "image.h"
 #include "loaders.h"
@@ -306,42 +304,6 @@ imlib_context_get_operation(void)
    return (Imlib_Operation) ctx->operation;
 }
 
-EAPI void
-imlib_context_set_font(Imlib_Font font)
-{
-   ctx->font = font;
-}
-
-EAPI                Imlib_Font
-imlib_context_get_font(void)
-{
-   return ctx->font;
-}
-
-EAPI void
-imlib_context_set_direction(Imlib_Text_Direction direction)
-{
-   ctx->direction = direction;
-}
-
-EAPI void
-imlib_context_set_angle(double angle)
-{
-   ctx->angle = angle;
-}
-
-EAPI double
-imlib_context_get_angle(void)
-{
-   return ctx->angle;
-}
-
-EAPI                Imlib_Text_Direction
-imlib_context_get_direction(void)
-{
-   return ctx->direction;
-}
-
 EAPI void
 imlib_context_set_color(int red, int green, int blue, int alpha)
 {
@@ -1386,458 +1348,6 @@ imlib_image_tile(void)
    __imlib_TileImageVert(im);
 }
 
-EAPI                Imlib_Font
-imlib_load_font(const char *font_name)
-{
-   return __imlib_font_load_joined(font_name);
-}
-
-EAPI void
-imlib_free_font(void)
-{
-   CHECK_PARAM_POINTER("font", ctx->font);
-   __imlib_font_free(ctx->font);
-   ctx->font = NULL;
-}
-
-EAPI int
-imlib_insert_font_into_fallback_chain(Imlib_Font font, Imlib_Font fallback_font)
-{
-   CHECK_PARAM_POINTER_RETURN("font", font, 1);
-   CHECK_PARAM_POINTER_RETURN("fallback_font", fallback_font, 1);
-   return __imlib_font_insert_into_fallback_chain_imp(font, fallback_font);
-}
-
-EAPI void
-imlib_remove_font_from_fallback_chain(Imlib_Font fallback_font)
-{
-   CHECK_PARAM_POINTER("fallback_font", fallback_font);
-   __imlib_font_remove_from_fallback_chain_imp(fallback_font);
-}
-
-EAPI                Imlib_Font
-imlib_get_prev_font_in_fallback_chain(Imlib_Font fn)
-{
-   CHECK_PARAM_POINTER_RETURN("fn", fn, 0);
-   return ((ImlibFont *) fn)->fallback_prev;
-}
-
-EAPI                Imlib_Font
-imlib_get_next_font_in_fallback_chain(Imlib_Font fn)
-{
-   CHECK_PARAM_POINTER_RETURN("fn", fn, 0);
-   return ((ImlibFont *) fn)->fallback_next;
-}
-
-EAPI void
-imlib_text_draw(int x, int y, const char *text)
-{
-   imlib_text_draw_with_return_metrics(x, y, text, NULL, NULL, NULL, NULL);
-}
-
-EAPI void
-imlib_text_draw_with_return_metrics(int x, int y, const char *text,
-                                    int *width_return, int *height_return,
-                                    int *horizontal_advance_return,
-                                    int *vertical_advance_return)
-{
-   ImlibImage         *im;
-   ImlibFont          *fn;
-   int                 dir;
-
-   CHECK_PARAM_POINTER("font", ctx->font);
-   CHECK_PARAM_POINTER("image", ctx->image);
-   CHECK_PARAM_POINTER("text", text);
-   CAST_IMAGE(im, ctx->image);
-   if (__imlib_LoadImageData(im))
-      return;
-   fn = (ImlibFont *) ctx->font;
-   __imlib_DirtyImage(im);
-
-   dir = ctx->direction;
-   if (ctx->direction == IMLIB_TEXT_TO_ANGLE && ctx->angle == 0.0)
-      dir = IMLIB_TEXT_TO_RIGHT;
-
-   __imlib_render_str(im, fn, x, y, text, ctx->pixel, dir,
-                      ctx->angle, width_return, height_return, 0,
-                      horizontal_advance_return, vertical_advance_return,
-                      ctx->operation,
-                      ctx->cliprect.x, ctx->cliprect.y,
-                      ctx->cliprect.w, ctx->cliprect.h);
-}
-
-EAPI void
-imlib_get_text_size(const char *text, int *width_return, int *height_return)
-{
-   ImlibFont          *fn;
-   int                 w, h;
-   int                 dir;
-
-   CHECK_PARAM_POINTER("font", ctx->font);
-   CHECK_PARAM_POINTER("text", text);
-   fn = (ImlibFont *) ctx->font;
-
-   dir = ctx->direction;
-   if (ctx->direction == IMLIB_TEXT_TO_ANGLE && ctx->angle == 0.0)
-      dir = IMLIB_TEXT_TO_RIGHT;
-
-   __imlib_font_query_size(fn, text, &w, &h);
-
-   switch (dir)
-     {
-     case IMLIB_TEXT_TO_RIGHT:
-     case IMLIB_TEXT_TO_LEFT:
-        if (width_return)
-           *width_return = w;
-        if (height_return)
-           *height_return = h;
-        break;
-     case IMLIB_TEXT_TO_DOWN:
-     case IMLIB_TEXT_TO_UP:
-        if (width_return)
-           *width_return = h;
-        if (height_return)
-           *height_return = w;
-        break;
-     case IMLIB_TEXT_TO_ANGLE:
-        if (width_return || height_return)
-          {
-             double              sa, ca;
-
-             sa = sin(ctx->angle);
-             ca = cos(ctx->angle);
-
-             if (width_return)
-               {
-                  double              x1, x2, xt;
-
-                  x1 = x2 = 0.0;
-                  xt = ca * w;
-                  if (xt < x1)
-                     x1 = xt;
-                  if (xt > x2)
-                     x2 = xt;
-                  xt = -(sa * h);
-                  if (xt < x1)
-                     x1 = xt;
-                  if (xt > x2)
-                     x2 = xt;
-                  xt = ca * w - sa * h;
-                  if (xt < x1)
-                     x1 = xt;
-                  if (xt > x2)
-                     x2 = xt;
-                  *width_return = (int)(x2 - x1);
-               }
-             if (height_return)
-               {
-                  double              y1, y2, yt;
-
-                  y1 = y2 = 0.0;
-                  yt = sa * w;
-                  if (yt < y1)
-                     y1 = yt;
-                  if (yt > y2)
-                     y2 = yt;
-                  yt = ca * h;
-                  if (yt < y1)
-                     y1 = yt;
-                  if (yt > y2)
-                     y2 = yt;
-                  yt = sa * w + ca * h;
-                  if (yt < y1)
-                     y1 = yt;
-                  if (yt > y2)
-                     y2 = yt;
-                  *height_return = (int)(y2 - y1);
-               }
-          }
-        break;
-     default:
-        break;
-     }
-}
-
-EAPI void
-imlib_get_text_advance(const char *text, int *horizontal_advance_return,
-                       int *vertical_advance_return)
-{
-   ImlibFont          *fn;
-   int                 w, h;
-
-   CHECK_PARAM_POINTER("font", ctx->font);
-   CHECK_PARAM_POINTER("text", text);
-   fn = (ImlibFont *) ctx->font;
-   __imlib_font_query_advance(fn, text, &w, &h);
-   if (horizontal_advance_return)
-      *horizontal_advance_return = w;
-   if (vertical_advance_return)
-      *vertical_advance_return = h;
-}
-
-EAPI int
-imlib_get_text_inset(const char *text)
-{
-   ImlibFont          *fn;
-
-   CHECK_PARAM_POINTER_RETURN("font", ctx->font, 0);
-   CHECK_PARAM_POINTER_RETURN("text", text, 0);
-   fn = (ImlibFont *) ctx->font;
-   return __imlib_font_query_inset(fn, text);
-}
-
-EAPI void
-imlib_add_path_to_font_path(const char *path)
-{
-   CHECK_PARAM_POINTER("path", path);
-   if (!__imlib_font_path_exists(path))
-      __imlib_font_add_font_path(path);
-}
-
-EAPI void
-imlib_remove_path_from_font_path(const char *path)
-{
-   CHECK_PARAM_POINTER("path", path);
-   __imlib_font_del_font_path(path);
-}
-
-EAPI char         **
-imlib_list_font_path(int *number_return)
-{
-   CHECK_PARAM_POINTER_RETURN("number_return", number_return, NULL);
-   return __imlib_font_list_font_path(number_return);
-}
-
-EAPI int
-imlib_text_get_index_and_location(const char *text, int x, int y,
-                                  int *char_x_return, int *char_y_return,
-                                  int *char_width_return,
-                                  int *char_height_return)
-{
-   ImlibFont          *fn;
-   int                 w, h, cx, cy, cw, ch, cp, xx, yy;
-   int                 dir;
-
-   CHECK_PARAM_POINTER_RETURN("font", ctx->font, -1);
-   CHECK_PARAM_POINTER_RETURN("text", text, -1);
-   fn = (ImlibFont *) ctx->font;
-
-   dir = ctx->direction;
-   if (ctx->direction == IMLIB_TEXT_TO_ANGLE && ctx->angle == 0.0)
-      dir = IMLIB_TEXT_TO_RIGHT;
-
-   imlib_get_text_size(text, &w, &h);
-
-   switch (dir)
-     {
-     case IMLIB_TEXT_TO_RIGHT:
-        xx = x;
-        yy = y;
-        break;
-     case IMLIB_TEXT_TO_LEFT:
-        xx = w - x;
-        yy = h - y;
-        break;
-     case IMLIB_TEXT_TO_DOWN:
-        xx = y;
-        yy = w - x;
-        break;
-     case IMLIB_TEXT_TO_UP:
-        xx = h - y;
-        yy = x;
-        break;
-     default:
-        return -1;
-     }
-
-   cp = __imlib_font_query_text_at_pos(fn, text, xx, yy, &cx, &cy, &cw, &ch);
-
-   switch (dir)
-     {
-     case IMLIB_TEXT_TO_RIGHT:
-        if (char_x_return)
-           *char_x_return = cx;
-        if (char_y_return)
-           *char_y_return = cy;
-        if (char_width_return)
-           *char_width_return = cw;
-        if (char_height_return)
-           *char_height_return = ch;
-        return cp;
-        break;
-     case IMLIB_TEXT_TO_LEFT:
-        cx = 1 + w - cx - cw;
-        if (char_x_return)
-           *char_x_return = cx;
-        if (char_y_return)
-           *char_y_return = cy;
-        if (char_width_return)
-           *char_width_return = cw;
-        if (char_height_return)
-           *char_height_return = ch;
-        return cp;
-        break;
-     case IMLIB_TEXT_TO_DOWN:
-        if (char_x_return)
-           *char_x_return = cy;
-        if (char_y_return)
-           *char_y_return = cx;
-        if (char_width_return)
-           *char_width_return = ch;
-        if (char_height_return)
-           *char_height_return = cw;
-        return cp;
-        break;
-     case IMLIB_TEXT_TO_UP:
-        cy = 1 + h - cy - ch;
-        if (char_x_return)
-           *char_x_return = cy;
-        if (char_y_return)
-           *char_y_return = cx;
-        if (char_width_return)
-           *char_width_return = ch;
-        if (char_height_return)
-           *char_height_return = cw;
-        return cp;
-        break;
-     default:
-        return -1;
-        break;
-     }
-   return -1;
-}
-
-EAPI void
-imlib_text_get_location_at_index(const char *text, int index,
-                                 int *char_x_return, int *char_y_return,
-                                 int *char_width_return,
-                                 int *char_height_return)
-{
-   ImlibFont          *fn;
-   int                 cx, cy, cw, ch, w, h;
-
-   CHECK_PARAM_POINTER("font", ctx->font);
-   CHECK_PARAM_POINTER("text", text);
-   fn = (ImlibFont *) ctx->font;
-
-   __imlib_font_query_char_coords(fn, text, index, &cx, &cy, &cw, &ch);
-
-   w = h = 0;
-   imlib_get_text_size(text, &w, &h);
-
-   switch (ctx->direction)
-     {
-     case IMLIB_TEXT_TO_RIGHT:
-        if (char_x_return)
-           *char_x_return = cx;
-        if (char_y_return)
-           *char_y_return = cy;
-        if (char_width_return)
-           *char_width_return = cw;
-        if (char_height_return)
-           *char_height_return = ch;
-        return;
-        break;
-     case IMLIB_TEXT_TO_LEFT:
-        cx = 1 + w - cx - cw;
-        if (char_x_return)
-           *char_x_return = cx;
-        if (char_y_return)
-           *char_y_return = cy;
-        if (char_width_return)
-           *char_width_return = cw;
-        if (char_height_return)
-           *char_height_return = ch;
-        return;
-        break;
-     case IMLIB_TEXT_TO_DOWN:
-        if (char_x_return)
-           *char_x_return = cy;
-        if (char_y_return)
-           *char_y_return = cx;
-        if (char_width_return)
-           *char_width_return = ch;
-        if (char_height_return)
-           *char_height_return = cw;
-        return;
-        break;
-     case IMLIB_TEXT_TO_UP:
-        cy = 1 + h - cy - ch;
-        if (char_x_return)
-           *char_x_return = cy;
-        if (char_y_return)
-           *char_y_return = cx;
-        if (char_width_return)
-           *char_width_return = ch;
-        if (char_height_return)
-           *char_height_return = cw;
-        return;
-        break;
-     default:
-        return;
-        break;
-     }
-}
-
-EAPI char         **
-imlib_list_fonts(int *number_return)
-{
-   CHECK_PARAM_POINTER_RETURN("number_return", number_return, NULL);
-   return __imlib_font_list_fonts(number_return);
-}
-
-EAPI void
-imlib_free_font_list(char **font_list, int number)
-{
-   __imlib_FileFreeDirList(font_list, number);
-}
-
-EAPI int
-imlib_get_font_cache_size(void)
-{
-   return __imlib_font_cache_get();
-}
-
-EAPI void
-imlib_set_font_cache_size(int bytes)
-{
-   __imlib_font_cache_set(bytes);
-}
-
-EAPI void
-imlib_flush_font_cache(void)
-{
-   __imlib_font_flush();
-}
-
-EAPI int
-imlib_get_font_ascent(void)
-{
-   CHECK_PARAM_POINTER_RETURN("font", ctx->font, 0);
-   return __imlib_font_ascent_get(ctx->font);
-}
-
-EAPI int
-imlib_get_font_descent(void)
-{
-   CHECK_PARAM_POINTER_RETURN("font", ctx->font, 0);
-   return __imlib_font_descent_get(ctx->font);
-}
-
-EAPI int
-imlib_get_maximum_font_ascent(void)
-{
-   CHECK_PARAM_POINTER_RETURN("font", ctx->font, 0);
-   return __imlib_font_max_ascent_get(ctx->font);
-}
-
-EAPI int
-imlib_get_maximum_font_descent(void)
-{
-   CHECK_PARAM_POINTER_RETURN("font", ctx->font, 0);
-   return __imlib_font_max_descent_get(ctx->font);
-}
-
 EAPI                Imlib_Color_Modifier
 imlib_create_color_modifier(void)
 {
diff --git a/src/lib/api.h b/src/lib/api.h
index 24bd0c1..24181b1 100644
--- a/src/lib/api.h
+++ b/src/lib/api.h
@@ -46,7 +46,9 @@ typedef struct {
    char                blend;
    Imlib_Color_Modifier color_modifier;
    ImlibOp             operation;
+#if ENABLE_TEXT
    Imlib_Font          font;
+#endif
    Imlib_Text_Direction direction;
    double              angle;
    Imlib_Color         color;
diff --git a/src/lib/api_text.c b/src/lib/api_text.c
new file mode 100644
index 0000000..a221d7d
--- /dev/null
+++ b/src/lib/api_text.c
@@ -0,0 +1,498 @@
+#include "config.h"
+#include <Imlib2.h>
+#include "common.h"
+
+#include <math.h>
+
+#include "api.h"
+#include "file.h"
+#include "image.h"
+#include "font.h"
+
+EAPI                Imlib_Font
+imlib_load_font(const char *font_name)
+{
+   return __imlib_font_load_joined(font_name);
+}
+
+EAPI void
+imlib_free_font(void)
+{
+   CHECK_PARAM_POINTER("font", ctx->font);
+   __imlib_font_free(ctx->font);
+   ctx->font = NULL;
+}
+
+EAPI void
+imlib_context_set_font(Imlib_Font font)
+{
+   ctx->font = font;
+}
+
+EAPI                Imlib_Font
+imlib_context_get_font(void)
+{
+   return ctx->font;
+}
+
+EAPI void
+imlib_context_set_direction(Imlib_Text_Direction direction)
+{
+   ctx->direction = direction;
+}
+
+EAPI                Imlib_Text_Direction
+imlib_context_get_direction(void)
+{
+   return ctx->direction;
+}
+
+EAPI void
+imlib_context_set_angle(double angle)
+{
+   ctx->angle = angle;
+}
+
+EAPI double
+imlib_context_get_angle(void)
+{
+   return ctx->angle;
+}
+
+EAPI int
+imlib_insert_font_into_fallback_chain(Imlib_Font font, Imlib_Font fallback_font)
+{
+   CHECK_PARAM_POINTER_RETURN("font", font, 1);
+   CHECK_PARAM_POINTER_RETURN("fallback_font", fallback_font, 1);
+   return __imlib_font_insert_into_fallback_chain_imp(font, fallback_font);
+}
+
+EAPI void
+imlib_remove_font_from_fallback_chain(Imlib_Font fallback_font)
+{
+   CHECK_PARAM_POINTER("fallback_font", fallback_font);
+   __imlib_font_remove_from_fallback_chain_imp(fallback_font);
+}
+
+EAPI                Imlib_Font
+imlib_get_prev_font_in_fallback_chain(Imlib_Font fn)
+{
+   CHECK_PARAM_POINTER_RETURN("fn", fn, 0);
+   return ((ImlibFont *) fn)->fallback_prev;
+}
+
+EAPI                Imlib_Font
+imlib_get_next_font_in_fallback_chain(Imlib_Font fn)
+{
+   CHECK_PARAM_POINTER_RETURN("fn", fn, 0);
+   return ((ImlibFont *) fn)->fallback_next;
+}
+
+EAPI void
+imlib_text_draw(int x, int y, const char *text)
+{
+   imlib_text_draw_with_return_metrics(x, y, text, NULL, NULL, NULL, NULL);
+}
+
+EAPI void
+imlib_text_draw_with_return_metrics(int x, int y, const char *text,
+                                    int *width_return, int *height_return,
+                                    int *horizontal_advance_return,
+                                    int *vertical_advance_return)
+{
+   ImlibImage         *im;
+   ImlibFont          *fn;
+   int                 dir;
+
+   CHECK_PARAM_POINTER("font", ctx->font);
+   CHECK_PARAM_POINTER("image", ctx->image);
+   CHECK_PARAM_POINTER("text", text);
+   CAST_IMAGE(im, ctx->image);
+   if (__imlib_LoadImageData(im))
+      return;
+   fn = (ImlibFont *) ctx->font;
+   __imlib_DirtyImage(im);
+
+   dir = ctx->direction;
+   if (ctx->direction == IMLIB_TEXT_TO_ANGLE && ctx->angle == 0.0)
+      dir = IMLIB_TEXT_TO_RIGHT;
+
+   __imlib_render_str(im, fn, x, y, text, ctx->pixel, dir,
+                      ctx->angle, width_return, height_return, 0,
+                      horizontal_advance_return, vertical_advance_return,
+                      ctx->operation,
+                      ctx->cliprect.x, ctx->cliprect.y,
+                      ctx->cliprect.w, ctx->cliprect.h);
+}
+
+EAPI void
+imlib_get_text_size(const char *text, int *width_return, int *height_return)
+{
+   ImlibFont          *fn;
+   int                 w, h;
+   int                 dir;
+
+   CHECK_PARAM_POINTER("font", ctx->font);
+   CHECK_PARAM_POINTER("text", text);
+   fn = (ImlibFont *) ctx->font;
+
+   dir = ctx->direction;
+   if (ctx->direction == IMLIB_TEXT_TO_ANGLE && ctx->angle == 0.0)
+      dir = IMLIB_TEXT_TO_RIGHT;
+
+   __imlib_font_query_size(fn, text, &w, &h);
+
+   switch (dir)
+     {
+     case IMLIB_TEXT_TO_RIGHT:
+     case IMLIB_TEXT_TO_LEFT:
+        if (width_return)
+           *width_return = w;
+        if (height_return)
+           *height_return = h;
+        break;
+     case IMLIB_TEXT_TO_DOWN:
+     case IMLIB_TEXT_TO_UP:
+        if (width_return)
+           *width_return = h;
+        if (height_return)
+           *height_return = w;
+        break;
+     case IMLIB_TEXT_TO_ANGLE:
+        if (width_return || height_return)
+          {
+             double              sa, ca;
+
+             sa = sin(ctx->angle);
+             ca = cos(ctx->angle);
+
+             if (width_return)
+               {
+                  double              x1, x2, xt;
+
+                  x1 = x2 = 0.0;
+                  xt = ca * w;
+                  if (xt < x1)
+                     x1 = xt;
+                  if (xt > x2)
+                     x2 = xt;
+                  xt = -(sa * h);
+                  if (xt < x1)
+                     x1 = xt;
+                  if (xt > x2)
+                     x2 = xt;
+                  xt = ca * w - sa * h;
+                  if (xt < x1)
+                     x1 = xt;
+                  if (xt > x2)
+                     x2 = xt;
+                  *width_return = (int)(x2 - x1);
+               }
+             if (height_return)
+               {
+                  double              y1, y2, yt;
+
+                  y1 = y2 = 0.0;
+                  yt = sa * w;
+                  if (yt < y1)
+                     y1 = yt;
+                  if (yt > y2)
+                     y2 = yt;
+                  yt = ca * h;
+                  if (yt < y1)
+                     y1 = yt;
+                  if (yt > y2)
+                     y2 = yt;
+                  yt = sa * w + ca * h;
+                  if (yt < y1)
+                     y1 = yt;
+                  if (yt > y2)
+                     y2 = yt;
+                  *height_return = (int)(y2 - y1);
+               }
+          }
+        break;
+     default:
+        break;
+     }
+}
+
+EAPI void
+imlib_get_text_advance(const char *text, int *horizontal_advance_return,
+                       int *vertical_advance_return)
+{
+   ImlibFont          *fn;
+   int                 w, h;
+
+   CHECK_PARAM_POINTER("font", ctx->font);
+   CHECK_PARAM_POINTER("text", text);
+   fn = (ImlibFont *) ctx->font;
+   __imlib_font_query_advance(fn, text, &w, &h);
+   if (horizontal_advance_return)
+      *horizontal_advance_return = w;
+   if (vertical_advance_return)
+      *vertical_advance_return = h;
+}
+
+EAPI int
+imlib_get_text_inset(const char *text)
+{
+   ImlibFont          *fn;
+
+   CHECK_PARAM_POINTER_RETURN("font", ctx->font, 0);
+   CHECK_PARAM_POINTER_RETURN("text", text, 0);
+   fn = (ImlibFont *) ctx->font;
+   return __imlib_font_query_inset(fn, text);
+}
+
+EAPI void
+imlib_add_path_to_font_path(const char *path)
+{
+   CHECK_PARAM_POINTER("path", path);
+   if (!__imlib_font_path_exists(path))
+      __imlib_font_add_font_path(path);
+}
+
+EAPI void
+imlib_remove_path_from_font_path(const char *path)
+{
+   CHECK_PARAM_POINTER("path", path);
+   __imlib_font_del_font_path(path);
+}
+
+EAPI char         **
+imlib_list_font_path(int *number_return)
+{
+   CHECK_PARAM_POINTER_RETURN("number_return", number_return, NULL);
+   return __imlib_font_list_font_path(number_return);
+}
+
+EAPI int
+imlib_text_get_index_and_location(const char *text, int x, int y,
+                                  int *char_x_return, int *char_y_return,
+                                  int *char_width_return,
+                                  int *char_height_return)
+{
+   ImlibFont          *fn;
+   int                 w, h, cx, cy, cw, ch, cp, xx, yy;
+   int                 dir;
+
+   CHECK_PARAM_POINTER_RETURN("font", ctx->font, -1);
+   CHECK_PARAM_POINTER_RETURN("text", text, -1);
+   fn = (ImlibFont *) ctx->font;
+
+   dir = ctx->direction;
+   if (ctx->direction == IMLIB_TEXT_TO_ANGLE && ctx->angle == 0.0)
+      dir = IMLIB_TEXT_TO_RIGHT;
+
+   imlib_get_text_size(text, &w, &h);
+
+   switch (dir)
+     {
+     case IMLIB_TEXT_TO_RIGHT:
+        xx = x;
+        yy = y;
+        break;
+     case IMLIB_TEXT_TO_LEFT:
+        xx = w - x;
+        yy = h - y;
+        break;
+     case IMLIB_TEXT_TO_DOWN:
+        xx = y;
+        yy = w - x;
+        break;
+     case IMLIB_TEXT_TO_UP:
+        xx = h - y;
+        yy = x;
+        break;
+     default:
+        return -1;
+     }
+
+   cp = __imlib_font_query_text_at_pos(fn, text, xx, yy, &cx, &cy, &cw, &ch);
+
+   switch (dir)
+     {
+     case IMLIB_TEXT_TO_RIGHT:
+        if (char_x_return)
+           *char_x_return = cx;
+        if (char_y_return)
+           *char_y_return = cy;
+        if (char_width_return)
+           *char_width_return = cw;
+        if (char_height_return)
+           *char_height_return = ch;
+        return cp;
+        break;
+     case IMLIB_TEXT_TO_LEFT:
+        cx = 1 + w - cx - cw;
+        if (char_x_return)
+           *char_x_return = cx;
+        if (char_y_return)
+           *char_y_return = cy;
+        if (char_width_return)
+           *char_width_return = cw;
+        if (char_height_return)
+           *char_height_return = ch;
+        return cp;
+        break;
+     case IMLIB_TEXT_TO_DOWN:
+        if (char_x_return)
+           *char_x_return = cy;
+        if (char_y_return)
+           *char_y_return = cx;
+        if (char_width_return)
+           *char_width_return = ch;
+        if (char_height_return)
+           *char_height_return = cw;
+        return cp;
+        break;
+     case IMLIB_TEXT_TO_UP:
+        cy = 1 + h - cy - ch;
+        if (char_x_return)
+           *char_x_return = cy;
+        if (char_y_return)
+           *char_y_return = cx;
+        if (char_width_return)
+           *char_width_return = ch;
+        if (char_height_return)
+           *char_height_return = cw;
+        return cp;
+        break;
+     default:
+        return -1;
+        break;
+     }
+   return -1;
+}
+
+EAPI void
+imlib_text_get_location_at_index(const char *text, int index,
+                                 int *char_x_return, int *char_y_return,
+                                 int *char_width_return,
+                                 int *char_height_return)
+{
+   ImlibFont          *fn;
+   int                 cx, cy, cw, ch, w, h;
+
+   CHECK_PARAM_POINTER("font", ctx->font);
+   CHECK_PARAM_POINTER("text", text);
+   fn = (ImlibFont *) ctx->font;
+
+   __imlib_font_query_char_coords(fn, text, index, &cx, &cy, &cw, &ch);
+
+   w = h = 0;
+   imlib_get_text_size(text, &w, &h);
+
+   switch (ctx->direction)
+     {
+     case IMLIB_TEXT_TO_RIGHT:
+        if (char_x_return)
+           *char_x_return = cx;
+        if (char_y_return)
+           *char_y_return = cy;
+        if (char_width_return)
+           *char_width_return = cw;
+        if (char_height_return)
+           *char_height_return = ch;
+        return;
+        break;
+     case IMLIB_TEXT_TO_LEFT:
+        cx = 1 + w - cx - cw;
+        if (char_x_return)
+           *char_x_return = cx;
+        if (char_y_return)
+           *char_y_return = cy;
+        if (char_width_return)
+           *char_width_return = cw;
+        if (char_height_return)
+           *char_height_return = ch;
+        return;
+        break;
+     case IMLIB_TEXT_TO_DOWN:
+        if (char_x_return)
+           *char_x_return = cy;
+        if (char_y_return)
+           *char_y_return = cx;
+        if (char_width_return)
+           *char_width_return = ch;
+        if (char_height_return)
+           *char_height_return = cw;
+        return;
+        break;
+     case IMLIB_TEXT_TO_UP:
+        cy = 1 + h - cy - ch;
+        if (char_x_return)
+           *char_x_return = cy;
+        if (char_y_return)
+           *char_y_return = cx;
+        if (char_width_return)
+           *char_width_return = ch;
+        if (char_height_return)
+           *char_height_return = cw;
+        return;
+        break;
+     default:
+        return;
+        break;
+     }
+}
+
+EAPI char         **
+imlib_list_fonts(int *number_return)
+{
+   CHECK_PARAM_POINTER_RETURN("number_return", number_return, NULL);
+   return __imlib_font_list_fonts(number_return);
+}
+
+EAPI void
+imlib_free_font_list(char **font_list, int number)
+{
+   __imlib_FileFreeDirList(font_list, number);
+}
+
+EAPI int
+imlib_get_font_cache_size(void)
+{
+   return __imlib_font_cache_get();
+}
+
+EAPI void
+imlib_set_font_cache_size(int bytes)
+{
+   __imlib_font_cache_set(bytes);
+}
+
+EAPI void
+imlib_flush_font_cache(void)
+{
+   __imlib_font_flush();
+}
+
+EAPI int
+imlib_get_font_ascent(void)
+{
+   CHECK_PARAM_POINTER_RETURN("font", ctx->font, 0);
+   return __imlib_font_ascent_get(ctx->font);
+}
+
+EAPI int
+imlib_get_font_descent(void)
+{
+   CHECK_PARAM_POINTER_RETURN("font", ctx->font, 0);
+   return __imlib_font_descent_get(ctx->font);
+}
+
+EAPI int
+imlib_get_maximum_font_ascent(void)
+{
+   CHECK_PARAM_POINTER_RETURN("font", ctx->font, 0);
+   return __imlib_font_max_ascent_get(ctx->font);
+}
+
+EAPI int
+imlib_get_maximum_font_descent(void)
+{
+   CHECK_PARAM_POINTER_RETURN("font", ctx->font, 0);
+   return __imlib_font_max_descent_get(ctx->font);
+}

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to