[M1 Mac, Big Sur 11.6.8, clang 13.0.0, FLTK 1.3.8, NO IDE]
[C++] 139の続きです。
前の記事では線の座標と長さを引数で設定しましたが、色や線種・太さを追加しました。
x()関数をヒントにrgb()関数とstyle()関数を作成し、これらの戻り値で設定値を取得できるようにしました。
引数が多いとコードを見てもどの引数が何を設定しているのか分かりにくいので、後ろ5つは省略可能にしました。デフォルトは太さ1の黒い実線になります。
#include <FLstd.h>
#include <cppstd.h>
#include <Line.h>
Line::Line(int x,int y, int w,int h, int r, int g, int b, int styletype, int stylewidth):Fl_Widget(x,y,w,h){
r_ = r, g_ = g, b_ = b;
styletype_ = styletype, stylewidth_ = stylewidth;
}
Line::~Line(){}
void Line::draw(){
vector<int> rgb1 = rgb();
fl_color(fl_rgb_color(rgb1[0], rgb1[1], rgb1[2]));
vector<int> style1 = style();
fl_line_style(style1[0],style1[1]);
int x1 = x(), y1 = y();
int x2 = x()+ w(), y2 = y()+ h();
fl_line(x1,y1,x2,y2);
}
#pragma once
#include <FLstd.h>
#include <cppstd.h>
class Line: public Fl_Widget
{
int r_, g_, b_;
int styletype_, stylewidth_;
public:
Line(int x,int y, int w,int h, int r = 0, int g = 0, int b = 0, int styletype = 0, int stylewidth = 1);
~Line();
void draw();
vector<int> rgb() const {return {r_,g_,b_};}
vector<int> style() const {return {styletype_, stylewidth_};}
};
#include "Line.h"
Line *line1 = new Line(40,171,309,0,211,207,217,0,1);
Line *line2 = new Line(349,10,0,195); // デフォルトの黒い実線
Line *line3 = new Line(278,131,71,0,211,207,217,0,1);
Line *line4 = new Line(278,131,0,41,211,207,217,0,1);