uzsolt

Hozzászólások

10 bejegyzés megtekintése - 4,081-4,090 / 9,618
  • Szerző
    Bejegyzés
  • Hozzászólás: Magyar betűk #2151492
    uzsolt
    Felhasználó
      zoltan22 wrote:
      Valoban:
      http://cairographics.org/manual/cairo-Text.html#cairo-show-text

      Eloszor utf8-ra kellene atalakitani a szoveget. Itt van egy pelda-kodreszlet: http://www.triptico.com/software/unicode.html#converting_posix_locale_strings_into_wchar_t_(c)

      Ha ezt belekakod a programba, es a draw_text-ben uft8-ra alakitod vele kirajzolas elott a karakterlancot, mukodnie kellene.

      Nem megy, sajna. A példa szerintem rossz, mert egy szimpla progiba beraktam:

      Code:
      #include
      #include
      #include

      wchar_t * locale_to_wchar(char * str)
      {
          wchar_t * ptr;
          size_t s;

          /* first arg == NULL means ‘calculate needed space’ */
          s = mbstowcs(NULL, str, 0);

          /* a size of -1 is triggered by an error in encoding; never
      *        happen in ISO-8859-* locales, but possible in UTF-8 */
          if(s == -1)
              return(NULL);

          /* malloc the necessary space */
          if((ptr = (wchar_t *)malloc((s + 1) * sizeof(wchar_t))) == NULL)
              return(NULL);
              printf(„%dn”,s);

          /* really do it */
          mbstowcs(ptr, str, 100);

          /* ensure NULL-termination */
          ptr[s] = L”;
        /* remember to free() ptr when done */
          return(ptr);
      }

      void main () {
              char *str;
              wchar_t *uni;

              setlocale(LC_ALL, „hu_HU”);
              str=malloc(300);
              str=”ödön”;
              uni=locale_to_wchar(str);
              if (uni==NULL) { printf(„nulln”); } else {printf(„%sn”,uni);}
      }

      Kiírja, hogy 4 hosszú az ödön, de csak egy „ö” betűt nyom ki.

      Az LC_ALL=…utf… nem jó, mivel ekkor valami rejtélyes ok miatt a tasklist-ekben SEMMI nem jelenik meg, még akkor se, ha nincs benne semmi fura karakter. A sima szövegdobozokba küldött szövegek jól megjelennek.
      Szóval a zoltan22 által ajánlott megoldást akarnám én megvalósítani…

      Hozzászólás: xmms szegmentes hiba #2152081
      uzsolt
      Felhasználó
        Pusztito wrote:
        Tegnap este még müködöt az xmms most meg már nem indul. Konzole-ból is probálom indítani és csak anyit ír ki hog szegmentes hiba.
        Most képzeld el, milyen lenne, ha a hiba mellé még egy szeget is az arcodba vágna! 😉
        Egyébként javaslom az audacious-t, pont olyan, mint az xmms, azt leszámítva, hogy ő nem ezeréves készletet használ (amit gyakorlatilag más újnak mondható progi nem – ezért szedték ki pl. az uhu-ból is, hogy csak az xmms miatt ne kelljen gtk1-et felrakni), meg jobban fejlődik.
        Hozzászólás: xmms szegmentes hiba #2152082
        uzsolt
        Felhasználó
          Pusztito wrote:
          Tegnap este még müködöt az xmms most meg már nem indul. Konzole-ból is probálom indítani és csak anyit ír ki hog szegmentes hiba.
          Most képzeld el, milyen lenne, ha a hiba mellé még egy szeget is az arcodba vágna! 😉
          Egyébként javaslom az audacious-t, pont olyan, mint az xmms, azt leszámítva, hogy ő nem ezeréves készletet használ (amit gyakorlatilag más újnak mondható progi nem – ezért szedték ki pl. az uhu-ból is, hogy csak az xmms miatt ne kelljen gtk1-et felrakni), meg jobban fejlődik.
          Hozzászólás: Magyar betűk #2151485
          uzsolt
          Felhasználó

            Nem találtam semmi debug-os opciót. Aztán péntek délután még tovább mentem, megnéztem a draw_text függvényt is. Ő a cairo_show_text függvényt hívja meg. A második paramétere „gyanús”, azaz „const char *utf8”.
            Ezután LC_ALL=hu_HU.utf8, a vasárnap (mai nap) szót már utf8-cal írja ki, ezután

            Code:
            echo 0 widget_tell tb_gmail áom | awesome-client

            És megjelent az „álom”!
            Szóval itt az utf8-cal lesz gond, márminthogy a cairo nem utf8-kódolással kapja meg, és innentől kifekszik…

            Hozzászólás: Magyar betűk #2151486
            uzsolt
            Felhasználó

              Nem találtam semmi debug-os opciót. Aztán péntek délután még tovább mentem, megnéztem a draw_text függvényt is. Ő a cairo_show_text függvényt hívja meg. A második paramétere „gyanús”, azaz „const char *utf8”.
              Ezután LC_ALL=hu_HU.utf8, a vasárnap (mai nap) szót már utf8-cal írja ki, ezután

              Code:
              echo 0 widget_tell tb_gmail áom | awesome-client

              És megjelent az „álom”!
              Szóval itt az utf8-cal lesz gond, márminthogy a cairo nem utf8-kódolással kapja meg, és innentől kifekszik…

              Hozzászólás: Magyar betűk #2151481
              uzsolt
              Felhasználó

                Na, szóval azt csináltam, hogy a widgets/textbox.c fájlt egy kicsit módosítottam.
                Van ott még a legelején egy függvény, aminek textbox_draw a neve.
                Kezdetben:

                Code:
                typedef struct
                {
                    char *text;
                    int width;
                    Alignment align;
                    XColor fg;
                    XColor bg;
                } Data;

                static int
                textbox_draw(Widget *widget, DrawCtx *ctx, int offset,
                             int used __attribute__ ((unused)))
                {
                    Data *d = widget->data;

                    if(d->width)
                        widget->area.width = d->width;
                    else
                        widget->area.width = draw_textwidth(widget->font, d->text);

                    widget->area.height = widget->statusbar->height;

                    if(!widget->user_supplied_x)
                        widget->area.x = widget_calculate_offset(widget->statusbar->width,
                                                                 widget->area.width,
                                                                 offset,
                                                                 widget->alignment);
                    if(!widget->user_supplied_y)
                        widget->area.y = 0;

                    if (d->text != NULL) {printf(„%sn”,d->text);}
                    draw_text(ctx, widget->area.x, widget->area.y, widget->area.width,
                              widget->statusbar->height, d->align, 0, widget->font,
                              d->text, d->fg, d->bg);

                    return widget->area.width;
                }

                Az „új”:

                Code:
                typedef struct
                {
                    char *text;
                    int width;
                    Alignment align;
                    XColor fg;
                    XColor bg;
                } Data;

                static int
                textbox_draw(Widget *widget, DrawCtx *ctx, int offset,
                            int used __attribute__ ((unused)))
                {
                    Data *d = widget->data;

                    if(d->width)
                        widget->area.width = d->width;
                    else
                        widget->area.width = draw_textwidth(widget->font, d->text);

                    widget->area.height = widget->statusbar->height;

                    if(!widget->user_supplied_x)
                        widget->area.x = widget_calculate_offset(widget->statusbar->width,
                                                                widget->area.width,
                                                                offset,
                                                                widget->alignment);
                    if(!widget->user_supplied_y)
                        widget->area.y = 0;

                ——>>>>>    if (d->text != NULL) {printf(„%sn”,d->text);}    <<<<<area.x, widget->area.y, widget->area.width,
                              widget->statusbar->height, d->align, 0, widget->font,
                              d->text, d->fg, d->bg);

                    return widget->area.width;
                }

                Tehát lényegében a d->text értékét (ami a szöveget hordozza) kinyomom az sdtout-ra. Lefordítom, startx &>X.log módon indítom.
                Kiadom az echo … álom | awesome-client parancsot. Majd terminálon:

                Code:
                $ grep lom X.log
                álom
                álom
                álom
                álom

                Tehát a tanulság: ő még jól megkapja.
                Nem vagyok egy nagy C-programozó (de azért az elhatározás megvan, hogy egyszer jobb leszek), de ha jól sejtem, akkor most a draw_text-et kellene szemügyre venni…

                Hozzászólás: Magyar betűk #2151482
                uzsolt
                Felhasználó

                  Na, szóval azt csináltam, hogy a widgets/textbox.c fájlt egy kicsit módosítottam.
                  Van ott még a legelején egy függvény, aminek textbox_draw a neve.
                  Kezdetben:

                  Code:
                  typedef struct
                  {
                      char *text;
                      int width;
                      Alignment align;
                      XColor fg;
                      XColor bg;
                  } Data;

                  static int
                  textbox_draw(Widget *widget, DrawCtx *ctx, int offset,
                               int used __attribute__ ((unused)))
                  {
                      Data *d = widget->data;

                      if(d->width)
                          widget->area.width = d->width;
                      else
                          widget->area.width = draw_textwidth(widget->font, d->text);

                      widget->area.height = widget->statusbar->height;

                      if(!widget->user_supplied_x)
                          widget->area.x = widget_calculate_offset(widget->statusbar->width,
                                                                   widget->area.width,
                                                                   offset,
                                                                   widget->alignment);
                      if(!widget->user_supplied_y)
                          widget->area.y = 0;

                      if (d->text != NULL) {printf(„%sn”,d->text);}
                      draw_text(ctx, widget->area.x, widget->area.y, widget->area.width,
                                widget->statusbar->height, d->align, 0, widget->font,
                                d->text, d->fg, d->bg);

                      return widget->area.width;
                  }

                  Az „új”:

                  Code:
                  typedef struct
                  {
                      char *text;
                      int width;
                      Alignment align;
                      XColor fg;
                      XColor bg;
                  } Data;

                  static int
                  textbox_draw(Widget *widget, DrawCtx *ctx, int offset,
                              int used __attribute__ ((unused)))
                  {
                      Data *d = widget->data;

                      if(d->width)
                          widget->area.width = d->width;
                      else
                          widget->area.width = draw_textwidth(widget->font, d->text);

                      widget->area.height = widget->statusbar->height;

                      if(!widget->user_supplied_x)
                          widget->area.x = widget_calculate_offset(widget->statusbar->width,
                                                                  widget->area.width,
                                                                  offset,
                                                                  widget->alignment);
                      if(!widget->user_supplied_y)
                          widget->area.y = 0;

                  ——>>>>>    if (d->text != NULL) {printf(„%sn”,d->text);}    <<<<<area.x, widget->area.y, widget->area.width,
                                widget->statusbar->height, d->align, 0, widget->font,
                                d->text, d->fg, d->bg);

                      return widget->area.width;
                  }

                  Tehát lényegében a d->text értékét (ami a szöveget hordozza) kinyomom az sdtout-ra. Lefordítom, startx &>X.log módon indítom.
                  Kiadom az echo … álom | awesome-client parancsot. Majd terminálon:

                  Code:
                  $ grep lom X.log
                  álom
                  álom
                  álom
                  álom

                  Tehát a tanulság: ő még jól megkapja.
                  Nem vagyok egy nagy C-programozó (de azért az elhatározás megvan, hogy egyszer jobb leszek), de ha jól sejtem, akkor most a draw_text-et kellene szemügyre venni…

                  Hozzászólás: Linuxfórum találkozó 2008. február #2150985
                  uzsolt
                  Felhasználó
                    majorlacko wrote:
                    „Bízom benne, hogy ezúttal kisbetü sporttárs is megtisztel bennünket jelenlétével. smile.gif
                    Látni valakit, aki láthatatlan, igazán nagy élmény lehet.

                    Ez nem ellenséges részemről, kisbetut soha senki sem látta. Ő egy entitás. 

                    Persze, mert kiderülne róla, hogy raccsol meg affektál meg pösze meg selypes… ;D

                    Hozzászólás: Linuxfórum találkozó 2008. február #2150986
                    uzsolt
                    Felhasználó
                      majorlacko wrote:
                      „Bízom benne, hogy ezúttal kisbetü sporttárs is megtisztel bennünket jelenlétével. smile.gif
                      Látni valakit, aki láthatatlan, igazán nagy élmény lehet.

                      Ez nem ellenséges részemről, kisbetut soha senki sem látta. Ő egy entitás. 

                      Persze, mert kiderülne róla, hogy raccsol meg affektál meg pösze meg selypes… ;D

                      Hozzászólás: SuSE 10.3 Compiz beállítás #2152011
                      uzsolt
                      Felhasználó
                      10 bejegyzés megtekintése - 4,081-4,090 / 9,618