| | 13 | |
|---|
| | 14 | |
|---|
| | 15 | /* |
|---|
| | 16 | struct DrawSettings { |
|---|
| | 17 | gdouble zoom; |
|---|
| | 18 | GdkRectangle zoom_rect; |
|---|
| | 19 | int widget_x; |
|---|
| | 20 | int widget_y; |
|---|
| | 21 | GdkInterpType interp; |
|---|
| | 22 | GdkPixbuf *pixbuf; |
|---|
| | 23 | int check_color1; |
|---|
| | 24 | int check_color2; |
|---|
| | 25 | }; |
|---|
| | 26 | */ |
|---|
| | 27 | |
|---|
| | 28 | static SV * |
|---|
| | 29 | newSVDrawSettings (DrawSettings * settings) |
|---|
| | 30 | { |
|---|
| | 31 | HV * hv = newHV(); |
|---|
| | 32 | hv_store (hv, "zoom", 4, newSVnv (settings->zoom), 0); |
|---|
| | 33 | hv_store (hv, "zoom_rect", 9, newSVGdkRectangle (&settings->zoom_rect), 0); |
|---|
| | 34 | hv_store (hv, "widget_x", 8, newSViv (settings->widget_x), 0); |
|---|
| | 35 | hv_store (hv, "widget_y", 8, newSViv (settings->widget_y), 0); |
|---|
| | 36 | hv_store (hv, "interp", 6, newSVGdkInterpType (settings->interp), 0); |
|---|
| | 37 | hv_store (hv, "pixbuf", 6, newSVGdkPixbuf (settings->pixbuf), 0); |
|---|
| | 38 | hv_store (hv, "check_color1", 12, newSViv (settings->check_color1), 0); |
|---|
| | 39 | hv_store (hv, "check_color2", 12, newSViv (settings->check_color2), 0); |
|---|
| | 40 | return newRV_noinc ((SV *) hv); |
|---|
| | 41 | } |
|---|
| | 42 | |
|---|
| | 43 | /* |
|---|
| | 44 | * returns a pointer to a DrawSettings you can use until control returns |
|---|
| | 45 | * to perl. |
|---|
| | 46 | */ |
|---|
| | 47 | static DrawSettings * |
|---|
| | 48 | SvDrawSettings (SV * sv) |
|---|
| | 49 | { |
|---|
| | 50 | HV * hv; |
|---|
| | 51 | SV ** svp; |
|---|
| | 52 | DrawSettings * settings; |
|---|
| | 53 | |
|---|
| | 54 | hv = (HV*) SvRV (sv); |
|---|
| | 55 | |
|---|
| | 56 | settings = gperl_alloc_temp (sizeof (DrawSettings)); |
|---|
| | 57 | |
|---|
| | 58 | svp = hv_fetch (hv, "zoom", 4, FALSE); |
|---|
| | 59 | if (svp) settings->zoom = SvNV (*svp); |
|---|
| | 60 | |
|---|
| | 61 | svp = hv_fetch (hv, "zoom_rect", 9, FALSE); |
|---|
| | 62 | if (svp) settings->zoom_rect = *SvGdkRectangle (*svp); |
|---|
| | 63 | |
|---|
| | 64 | svp = hv_fetch (hv, "widget_x", 8, FALSE); |
|---|
| | 65 | if (svp) settings->widget_x = SvIV (*svp); |
|---|
| | 66 | |
|---|
| | 67 | svp = hv_fetch (hv, "widget_y", 8, FALSE); |
|---|
| | 68 | if (svp) settings->widget_y = SvIV (*svp); |
|---|
| | 69 | |
|---|
| | 70 | svp = hv_fetch (hv, "interp", 6, FALSE); |
|---|
| | 71 | if (svp) settings->interp = SvGdkInterpType (*svp); |
|---|
| | 72 | |
|---|
| | 73 | svp = hv_fetch (hv, "check_color1", 12, FALSE); |
|---|
| | 74 | if (svp) settings->check_color1 = SvIV (*svp); |
|---|
| | 75 | |
|---|
| | 76 | svp = hv_fetch (hv, "check_color2", 12, FALSE); |
|---|
| | 77 | if (svp) settings->check_color2 = SvIV (*svp); |
|---|
| | 78 | |
|---|
| | 79 | return settings; |
|---|
| | 80 | } |
|---|